查询Spanner DB中的JSONB列数据

问题描述 投票:0回答:2

我们如何查询 json 字符串内数组元素中的特定字段 列数据类型是 JSONB

Sample json

{ "data" : [ 
   { "begin" : "..." },
   { "inter" : "..." },
   { "inter" : "..." },
   { "skip" : ".." },
   { "inter" : "..." },
   { "final": ".."}
}

我们需要在上面的json数据字符串中找到“inter”的值

我试过了

select colum_name ->> 'data' ->> 1 ->> 'inter' 

但索引不限于一个值,而是值的范围,因为键可以位于列表中的任何位置

sql postgresql jsonb google-cloud-spanner
2个回答
0
投票

尝试下面的查询,使用

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';

0
投票

使用

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';
© www.soinside.com 2019 - 2024. All rights reserved.