检索不共享密钥的JSON元素

时间:2019-12-25 12:33:28

标签: sql json postgresql

我有一个看起来像这样的JSON:

"names": {
"jack": {
  "probability": 0
},
"bob": {
  "probability": 0.5
},
"ana": {
  "probability": 0.2
}
"bill": {
}    

我想查询它以获得名称和概率表,如果没有概率值,则取0。 因此输出应如下所示:

name      probability
jack      0
bob       0.5
ana       0.2
bill      0

找不到以正确的方式查询json以获得这些结果的方法。我正在使用Postgresql。

1 个答案:

答案 0 :(得分:1)

您正在寻找jsonb_each()函数:

select n.name, coalesce(val ->> 'probability', '0')::numeric
from the_table t
  cross join jsonb_each( t.col -> 'names') as n(name, val)

如果您的列不是jsonb(应为json,而是json_each(),则必须改用phpinfo()

Online example