我有使用 JSON 作为标记联合的数据,这样顶级对象只包含一个子对象。子对象的类型取决于它在父对象中的键名,而不是一个单独的“标签”字段,这在 C 结构中是正常的。
例如
{"circle":{"radius":10}}
{"square":{"side":10}})
{"rectangle":{"width":10,"height":20}})
这对 JSON 模式和协议缓冲区非常有效。
我已阅读:https : //www.postgresql.org/docs/9.6/static/functions-json.html
我正在努力使用 Postgres 的 JSON 函数。如何执行以下 Javascript 的 SQL 等效项
Object.keys({"circle":{"radius":10}})[0] (== `"circle")
Object.keys({"square":{"side":10}})[0] (== `"square")
Object.keys({"rectangle":{"width":10,"height":20}})[0] (== `"rectangle")
带有 JSONB 字段?
有一个jsonb_object_keys
你可以使用它就像它的 Javascript 对应物。例如:
SELECT jsonb_object_keys(json_column)
FROM MyTable
这显然返回了一个记录集。但是,如果您知道 JSON 对象中永远只有一个键,那么如果需要,只需将其用作子查询即可。例如:
SELECT *
FROM MyTable
WHERE 'cicle' = (
SELECT jsonb_object_keys(json_column)
FROM MyTable
)
编辑
您可以获得如下标量值:
SELECT json_build_array(jsonb_object_keys(json_column)) -> 0
FROM MyTable
请注意,这是 json(即"circle"
,不是circle
)。如果需要文本值,请使用->>
运算符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句