我有使用JSON作为标记联合的数据,因此顶级对象只包含一个子对象。子对象的类型取决于父对象中的键名,而不是单独的"标记"字段,在C结构中是正常的。
e.g。
{"circle":{"radius":10}}
{"square":{"side":10}})
{"rectangle":{"width":10,"height":20}})
这与JSON Schema和Protocol Buffers非常吻合。
我看过: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字段?
答案 0 :(得分:3)
您可以使用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
)。如果您需要文本值,请使用->>
运算符。