在Postgresql中查询复杂JSON的干净方法

在Postgresql中查询复杂JSON的干净方法,json,postgresql,jsonb,postgresql-9.5,Json,Postgresql,Jsonb,Postgresql 9.5,我将JSON数据存储在postgresql 9.5 DB中的JSONB字段中 有没有一种方法可以在不知道哪个列是子对象的情况下生成子对象列 有问题的JSON示例: { "a":1, "b":[1,2,3], "c":"bar", "d":{ "key1":"value1", "key2":"value2" } } 我可以使用以下方法从JSON对象获取所有键 SELECT*FROM json_object_key(“{”a:1,“b”:[1

我将JSON数据存储在postgresql 9.5 DB中的JSONB字段中

有没有一种方法可以在不知道哪个列是子对象的情况下生成子对象列

有问题的JSON示例:

{
   "a":1,
   "b":[1,2,3],
   "c":"bar",
   "d":{
      "key1":"value1",
      "key2":"value2"
   }
 }
我可以使用以下方法从JSON对象获取所有键

SELECT*FROM json_object_key(“{”a:1,“b”:[1,2,3],“c”:“bar”,“d”:{“key1”:“value1”,“key2”:“value2”}')

在这一点上,我可以使用json_to_record(),但我想将该列拆分为各自独立的字段

选择*从json_到_记录(“{”a:1,“b”:[1,2,3],“c”:“bar”,“d”:{“key1”:“value1”,“key2”:“value2”}”)作为x(a int,b text,c text,d text)

抓住我

a| b       | c   | d     
1| [1,2,3] | bar | {"key1":"value1", "key2":"value2"}
有没有一种方法可以返回类似的内容,最好是在单个查询中

--------------------------------------------------------------------
a| b       | c   | d                                  | key1  | key2     
1| [1,2,3] | bar | {"key1":"value1", "key2":"value2"} |value1 |value2
结果:

 a |     b     |  c  |                  d                   |  key1  |  key2  
---+-----------+-----+--------------------------------------+--------+--------
 1 | [1, 2, 3] | bar | {"key1": "value1", "key2": "value2"} | value1 | value2
(1 row)

谢谢这让我达到了95%。如果您不明确知道d是另一个JSON对象,那么有没有办法为该级别上的所有对象生成jsonb_to_记录(v->'d')?我找到了一个json_typeof()表函数,该函数获取类型。从另一个查询生成SQL是一种不好的做法吗?这一挑战源于从临时构建的Microsoft Word文档中提取表的内容。我们不知道每个表有多少列,也不知道列的名称。表之间的列标题名称或列数也不一致。
 a |     b     |  c  |                  d                   |  key1  |  key2  
---+-----------+-----+--------------------------------------+--------+--------
 1 | [1, 2, 3] | bar | {"key1": "value1", "key2": "value2"} | value1 | value2
(1 row)