假设我们在Postgresql中具有以下JSON:
{ "name": "John", "items": [ { "item_name": "lettuce", "price": 2.65, "units": "no" }, { "item_name": "ketchup", "price": 1.51, "units": "litres" } ] }
JSON存储在下表中:
create table testy_response_p (
ID serial NOT NULL PRIMARY KEY,
content_json json NOT NULL
)
insert into testy_response_p (content_json) values (
'{ "name": "John", "items": [ { "item_name": "lettuce", "price": 2.65, "units": "no" }, { "item_name": "ketchup", "price": 1.51, "units": "litres" } ] }'
)
由于以下内容可以返回JSON或文本(分别与->
和->>
select content_json ->> 'items' from testy_response_p
一起返回),我想使用子查询来获取{{1 }}:
items
我得到的只是一个错误,但我不知道自己在做什么错。子查询的输出是文本。最终输出是:
select *
from json_array_elements(
select content_json ->> 'items' from testy_response_p
)
答案 0 :(得分:2)
您需要加入函数的结果。您不能使用->>
运算符,因为它会返回文本,而不是json,而json_array_elements()
只能使用JSON值作为输入。
select p.id, e.*
from testy_response_p p
cross join lateral json_array_elements(p.content_json -> 'items') as e;