首页 > 解决方案 > Postgres JSON:在不知道密钥的情况下获取第一个节点值

问题描述

我想在不知道密钥的情况下获取第一个节点值。

{"dog":"198","cat":"2835"}

我可以使用每行 1 个返回所有键,json_object_keys()但我不想要这个,我只想要 json 中的第一个节点值。

我想回来198

我怎样才能做到这一点?

标签: sqljsonpostgresql

解决方案


演示:db<>fiddle

WITH jsondata AS (
    SELECT '{"dog":"198","cat":"2835"}'::json as data
)
SELECT 
    value
FROM jsondata, json_each_text(data)
LIMIT 1
  1. json_each_text将所有元素展开为一行,每行包含两列keyvalue作为类型text(如果您愿意,可以将此文本转换为整数)
  2. LIMIT输出到第一个


注意:通常 JSON 对象中没有“第一个”元素。元素的顺序不固定。对象{"a":1, "b":2}等于{"b":2, "a":1}。因此,您可能会同时获得这两个值中的任何一个。它可能是完全随机的。例如,在这个小提琴中,我不是转换为 typejson而是 type jsonb。这给出了cat. 所以这取决于内部状态,哪个被选为“第一个”。


推荐阅读