在Postgres中获取JSON字段键名

在Postgres中获取JSON字段键名,json,postgresql,jsonb,postgresql-9.6,Json,Postgresql,Jsonb,Postgresql 9.6,我有使用JSON作为标记联合的数据,这样一个顶级对象只包含一个子对象。子对象的类型取决于它在父对象中的键名,而不是一个单独的“标记”字段,这在C结构中是正常的 e、 g 这非常适合JSON模式和协议缓冲区 我读过: 我正在努力使用Postgres的JSON函数。如何实现以下Javascript的SQL等价物 Object.keys({"circle":{"radius":10}})[0] (== `"circle") Object.keys({"square":{"s

我有使用JSON作为标记联合的数据,这样一个顶级对象只包含一个子对象。子对象的类型取决于它在父对象中的键名,而不是一个单独的“标记”字段,这在C结构中是正常的

e、 g

这非常适合JSON模式和协议缓冲区

我读过:

我正在努力使用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_对象_键
,您可以使用它,它类似于它的Javascript对应项。例如:

SELECT jsonb_object_keys(json_column)
FROM MyTable
SELECT *
FROM MyTable
WHERE 'cicle' = (
  SELECT jsonb_object_keys(json_column)
  FROM MyTable
)
这显然会返回一个记录集。但是,如果您知道JSON对象中只有一个键,那么如果需要的话,可以将其用作子查询。例如:

SELECT jsonb_object_keys(json_column)
FROM MyTable
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(即
“圆圈”
,而不是
圆圈
)。如果需要文本值,请使用
->
操作符。

有一个
jsonb\u object\u keys
可以使用,它与Javascript类似。例如:

SELECT jsonb_object_keys(json_column)
FROM MyTable
SELECT *
FROM MyTable
WHERE 'cicle' = (
  SELECT jsonb_object_keys(json_column)
  FROM MyTable
)
这显然会返回一个记录集。但是,如果您知道JSON对象中只有一个键,那么如果需要的话,可以将其用作子查询。例如:

SELECT jsonb_object_keys(json_column)
FROM MyTable
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(即
“圆圈”
,而不是
圆圈
)。如果您需要文本值,请使用
->
运算符。

这看起来相关:这看起来相关:有没有办法获取第一个对象键,即将记录集转换为标量?我编辑了答案,以给出一个获取标量值的示例有没有办法获取第一个对象键,例如,将记录集转换为标量?我编辑了答案,以给出一个获取标量值的示例