我在表中有一列似乎是JSON,但是我不确定如何解析它(PostgreSQL)。
以下是感兴趣的数据示例:
[{'identifier': 'goals_scored', 'a': [{'value': 1, 'element': 278}], 'h': [{'value': 1, 'element': 183}, {'value': 1, 'element': 188}, {'value': 1, 'element': 191}]}, {'identifier': 'assists', 'a': [{'value': 1, 'element': 283}], 'h': [{'value': 1, 'element': 182}, {'value': 1, 'element': 187}, {'value': 1, 'element': 188}, {'value': 1, 'element': 191}]}, {'identifier': 'own_goals', 'a': [{'value': 1, 'element': 277}], 'h': []}, {'identifier': 'penalties_saved', 'a': [], 'h': []}, {'identifier': 'penalties_missed', 'a': [], 'h': []}, {'identifier': 'yellow_cards', 'a': [{'value': 1, 'element': 283}, {'value': 1, 'element': 288}], 'h': []}, {'identifier': 'red_cards', 'a': [], 'h': []}, {'identifier': 'saves', 'a': [{'value': 4, 'element': 280}], 'h': [{'value': 2, 'element': 189}, {'value': 2, 'element': 526}]}, {'identifier': 'bonus', 'a': [{'value': 1, 'element': 278}], 'h': [{'value': 3, 'element': 188}, {'value': 2, 'element': 191}]}, {'identifier': 'bps', 'a': [{'value': 32, 'element': 278}, {'value': 19, 'element': 280}, {'value': 18, 'element': 273}, {'value': 16, 'element': 274}, {'value': 16, 'element': 283}, {'value': 15, 'element': 276}, {'value': 12, 'element': 286}, {'value': 11, 'element': 290}, {'value': 10, 'element': 287}, {'value': 3, 'element': 434}, {'value': 2, 'element': 277}, {'value': 1, 'element': 285}, {'value': -3, 'element': 288}], 'h': [{'value': 46, 'element': 188}, {'value': 40, 'element': 191}, {'value': 27, 'element': 183}, {'value': 26, 'element': 187}, {'value': 24, 'element': 182}, {'value': 18, 'element': 197}, {'value': 15, 'element': 181}, {'value': 12, 'element': 198}, {'value': 11, 'element': 199}, {'value': 10, 'element': 184}, {'value': 7, 'element': 189}, {'value': 7, 'element': 526}, {'value': 3, 'element': 192}, {'value': 3, 'element': 200}]}]
层次结构与我习惯的不同,并且通常的->和->>解析似乎不起作用。
有什么提示吗?
谢谢!
答案 0 :(得分:0)
这既轻松又快捷,但是如果我将字符串中的所有单引号更改为引号,然后运行类似的操作,则可以提取数据。我相信您可以做得更优雅。
select
qq.a::jsonb->0->>'element'
from
(select
q.j->0->>'a' as a
from
(select
'[{"identifier": "goals_scored", "a": [{"value": 1, "element": 278}], "h": [{"value": 1, "element": 183}, {"value": 1, "element": 188}, {"value": 1, "element": 191}]}, {"identifier": "assists", "a": [{"value": 1, "element": 283}], "h": [{"value": 1, "element": 182}, {"value": 1, "element": 187}, {"value": 1, "element": 188}, {"value": 1, "element": 191}]}, {"identifier": "own_goals", "a": [{"value": 1, "element": 277}], "h": []}, {"identifier": "penalties_saved", "a": [], "h": []}, {"identifier": "penalties_missed", "a": [], "h": []}, {"identifier": "yellow_cards", "a": [{"value": 1, "element": 283}, {"value": 1, "element": 288}], "h": []}, {"identifier": "red_cards", "a": [], "h": []}, {"identifier": "saves", "a": [{"value": 4, "element": 280}], "h": [{"value": 2, "element": 189}, {"value": 2, "element": 526}]}, {"identifier": "bonus", "a": [{"value": 1, "element": 278}], "h": [{"value": 3, "element": 188}, {"value": 2, "element": 191}]}, {"identifier": "bps", "a": [{"value": 32, "element": 278}, {"value": 19, "element": 280}, {"value": 18, "element": 273}, {"value": 16, "element": 274}, {"value": 16, "element": 283}, {"value": 15, "element": 276}, {"value": 12, "element": 286}, {"value": 11, "element": 290}, {"value": 10, "element": 287}, {"value": 3, "element": 434}, {"value": 2, "element": 277}, {"value": 1, "element": 285}, {"value": -3, "element": 288}], "h": [{"value": 46, "element": 188}, {"value": 40, "element": 191}, {"value": 27, "element": 183}, {"value": 26, "element": 187}, {"value": 24, "element": 182}, {"value": 18, "element": 197}, {"value": 15, "element": 181}, {"value": 12, "element": 198}, {"value": 11, "element": 199}, {"value": 10, "element": 184}, {"value": 7, "element": 189}, {"value": 7, "element": 526}, {"value": 3, "element": 192}, {"value": 3, "element": 200}]}]'::jsonb as j) q
) qq
;