我想在不知道键的情况下获取第一个节点值。
{"dog":"198","cat":"2835"}
我可以使用json_object_keys()
以每行1个的键返回所有键,但是我不想要这个,我只想要json中的第一个节点值。
我想退回198
我该怎么做?
答案 0 :(得分:1)
WITH jsondata AS (
SELECT '{"dog":"198","cat":"2835"}'::json as data
)
SELECT
value
FROM jsondata, json_each_text(data)
LIMIT 1
json_each_text
将所有元素扩展为一行,每列分别具有两列key
和value
,类型为text
(如果您愿意,可以将此文本转换为整数)< / li>
LIMIT
输出到第一个
{"a":1, "b":2}
等于{"b":2, "a":1}
。因此,您可能会同时获得这两个值。它可能是完全随机的。例如。在this fiddle中,我不是转换为json
类型,而是输入jsonb
。这给出了cat
。因此,取决于内部状态中哪个被选为“第一个”。
答案 1 :(得分:0)
您可以尝试使用row_number
窗口函数获取CTE中的第一个键,然后使用->获取值。
CREATE TABLE T(
col json
);
insert into t values ('{"dog":"198","cat":"2835"}');
查询1 :
with getFirstKey as(
SELECT keys FROM (
SELECT keys,row_number() over(order by (select 1)) rn
FROM (
SELECT col,json_object_keys(col) keys
FROM T
) t1
) t1
where rn = 1
)
SELECT col::json->(select keys from getFirstKey)
FROM T;
Results :
| ?column? |
|----------|
| "198" |