在处理JSON字符串时,该字符串存储在DB表列中,如下所示:
假设表名为t1,列名为data:
data列将json字符串存储为:
[{"K":"V"}]
下面是我的查询,以获取基于Key的Value:
select Value ->> 'Value'
from json_array_elements(select data from t1) Key
where Key->>'Key'='K';
在执行时,它给我语法错误。
尝试了所有可能的方法来解决这个问题,但最终需要帮助。
----编辑这是我如何得到所需结果的------
1.创建一个表:
CREATE table(id int,data json);
1.将数据插入t1表:
插入t1值
(1,'[{"K":"V"}]'),
(2,'[{"loadShortCut_AutoText":"both"}]'),
(3,'[{"P":"R"}]');
1.下面的查询获取输出:
select row,row-〉〉'loadShortCut_AutoText' as value from t1,json_array_elements(t1.data)as row WHEREt1.id=2;
1.输出:
{“loadShortCut_AutoText”:“both”} both
3条答案
按热度按时间mxg2im7a1#
你可以试试这个:
这将仅在键
'K'
存在时返回数据Demo here
ovfsdjhp2#
或者,您可以使用jsonb_path_query_array直接查询json数组(需要将
json
列转换为jsonb
)JSON路径
$[*]?(exists (@."K"))
选择所有包含键"K"
的数组元素,而不是采用第一个这样的-> 0
并提取其值#>> '{K}'::text[]
。这种方法的优点是,它也适用于具有重复数据(id=4)和
null
值(id=6)的JSON数组,如示例输出所示9gm1akwq3#
json_array_elements()
为每个数组元素返回一行,这也是一个JSON值。select
语句不能作为参数传递,需要将源表放入“main”FROM子句中: