如何在postgresql中从jsonb获取特定的键?

wfsdck30  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(165)

我在jsonb中有一个名为"lines"的列,其中包含许多如下所示的对象:

[
 {
  "a" : "1", 
  "b" : "2", 
  "c" : "3"
 }, 
 {
  "a" : "4", 
  "b" : "5", 
  "c" : "6"
 }
]

这是我的疑问

SELECT *
FROM public.test
WHERE public.test.lines::jsonb ? '[{"c"}]'

在我的查询中,我只想获取数组中包含"c"键的行,但执行后什么也没有

yx2lnoni

yx2lnoni1#

快速解决方案:

SELECT
    'c',
    *
FROM
    jsonb_path_query('[{"a": "1", "b": "2", "c": "3"}, {"a": "4", "b": "5", "c": "6"}]', '$[*].c');

 ?column? | jsonb_path_query 
----------+------------------
 c        | "3"
 c        | "6"
sulc1iza

sulc1iza2#

?运算符只适用于字符串,不适用于json对象,如果你想测试数组元素中是否包含值为c的键,你可以使用JSON路径 predicate :

SELECT *
FROM test
WHERE lines::jsonb @@ '$[*].c != null'

相关问题