我们如何查询 json 字符串内数组元素中的特定字段 列数据类型是 JSONB
Sample json
{ "data" : [
{ "begin" : "..." },
{ "inter" : "..." },
{ "inter" : "..." },
{ "skip" : ".." },
{ "inter" : "..." },
{ "final": ".."}
}
我们需要在上面的json数据字符串中找到“inter”的值
我试过了
select colum_name ->> 'data' ->> 1 ->> 'inter'
但索引不限于一个值,而是值的范围,因为键可以位于列表中的任何位置
尝试下面的查询,使用
jsonb_array_elements(your_column->'data')
取消嵌套 JSONB 数据的数组元素,从而允许我们迭代每个元素。然后,使用 ->>
运算符从这些元素中提取“inter”键的文本值。包含一个 WHERE
子句来过滤掉没有“inter”键的元素,并确保仅对数组数据类型执行操作。
SELECT jsonb_array_elements(your_column->'data') ->> 'inter' as inter_value
FROM your_table
WHERE jsonb_typeof(your_column->'data') = 'array' AND
jsonb_array_elements(your_column->'data') ? 'inter';
使用
jsonb_array_elements
和横向连接展平/扩展JSON列,按“inter
属性存在”进行过滤。
select j ->> 'inter' as inter -- <maybe other expressions here>
from the_table,
lateral jsonb_array_elements(the_json_column::jsonb -> 'data') as j
where j ? 'inter';