在 Postgres 中获取 JSON 字段键名
Getting JSON field key names in Postgres
我有使用 JSON 作为标记联合的数据,这样一个顶级对象只包含一个子对象。子对象的类型取决于它在父对象中的键名,而不是单独的 "tag" 字段,这在 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 函数。我如何做 SQL 相当于以下 Javascript
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
这显然returns一个记录集。但是,如果您知道 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
)。如果需要文本值,请使用 ->>
运算符。
可以使用jsonb_object_keys获取jsonb中的列键
SELECT jsonb_object_keys(json_column)
FROM foo;
例如:
SELECT distinct jsonb_object_keys(metadata)
FROM department.metadata;
我有使用 JSON 作为标记联合的数据,这样一个顶级对象只包含一个子对象。子对象的类型取决于它在父对象中的键名,而不是单独的 "tag" 字段,这在 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 函数。我如何做 SQL 相当于以下 Javascript
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
这显然returns一个记录集。但是,如果您知道 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
)。如果需要文本值,请使用 ->>
运算符。
可以使用jsonb_object_keys获取jsonb中的列键
SELECT jsonb_object_keys(json_column)
FROM foo;
例如:
SELECT distinct jsonb_object_keys(metadata)
FROM department.metadata;