Arm*_*rea 5 arrays postgresql json
我尝试使用以下示例查询json数组:如何使用新PostgreSQL JSON数据类型内的字段进行查询?
他们使用示例:
SELECT *
FROM json_array_elements(
'[{"name": "Toby", "occupation": "Software Engineer"},
{"name": "Zaphod", "occupation": "Galactic President"} ]'
) AS elem
WHERE elem->>'name' = 'Toby';
Run Code Online (Sandbox Code Playgroud)
但是我的Json数组看起来更像这样(如果使用示例):
{
"people": [{
"name": "Toby",
"occupation": "Software Engineer"
},
{
"name": "Zaphod",
"occupation": "Galactic President"
}
]
}
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:错误:无法在非数组上调用json_array_elements
我的Json“数组”不是数组吗?我必须使用此Json字符串,因为它包含在数据库中,因此如果它不是数组,则必须告诉他们对其进行修复。或者,还有另一种查询方法吗?
我阅读了文档,但无济于事,并不断出错。
json数组具有一个键,people因此可以my_json->'people'在函数中使用:
with my_table(my_json) as (
values(
'{
"people": [
{
"name": "Toby",
"occupation": "Software Engineer"
},
{
"name": "Zaphod",
"occupation": "Galactic President"
}
]
}'::json)
)
select t.*
from my_table t,
json_array_elements(my_json->'people') elem
where elem->>'name' = 'Toby';
Run Code Online (Sandbox Code Playgroud)
该函数json_array_elements()取消嵌套json数组,并将其所有元素生成为行:
select elem->>'name' as name, elem->>'occupation' as occupation
from my_table t,
json_array_elements(my_json->'people') elem
name | occupation
--------+--------------------
Toby | Software Engineer
Zaphod | Galactic President
(2 rows)
Run Code Online (Sandbox Code Playgroud)
如果您对Toby的职业感兴趣:
select elem->>'occupation' as occupation
from my_table t,
json_array_elements(my_json->'people') elem
where elem->>'name' = 'Toby'
occupation
-------------------
Software Engineer
(1 row)
Run Code Online (Sandbox Code Playgroud)