2

我有看起来像在 postgres 中的 json 表中的数据,其中有一列名为 content 的数据类似于

{schd:[{key1:val1, key2:val2}]}

我提取密钥的方式是

jsonb_array_elements('content'->'schd')->'key1'

但是,当我收到错误时,我不能使用它来加入/加入

ERROR:  argument of JOIN/ON must not return a set

我尝试使用 LATERAL,但我需要澄清这是否会创建交叉连接,因为输出看起来并不安静。

对我应该在这里采用的其他方法有什么建议吗?

4

1 回答 1

0

{"Schd":["key1":"val1", "key2":"val2"]}不是有效的 Json,因为数组中的键不是数字。

如果数组实际上是一个像{"Schd":{"key1":"val1", "val1":"val2"}}您可以访问的对象val1

test=# SELECT '{"Schd":{"key1":"val1", "val1":"val2"}}'::json->'Schd'->'key1';
 ?column? 
----------
 "val1"
(1 row)

{"Schd":["val1", "val2"]}如果它是一个像您可以访问的数组val1

test=# SELECT '{"Schd":["val1", "val2"]}'::json->'Schd'->0;
 ?column? 
----------
 "val1"
(1 row)

更新:

如果 Json 是{"schd":[{"key1":"val1", "key2":"val2"}]},这里是如何获得val1

test=# SELECT '{"schd":[{"key1":"val1", "key2":"val2"}]}'::json->'schd'->0->'key1';
 ?column? 
----------
 "val1"
(1 row)
于 2017-03-13T23:00:48.083 回答