如何在postgresql(10.3)中将json数据拆分并插入单独的行和列中?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (55)

有以下数据集:

{"date":{"year":2017,"month":7,"day":2},"data":{"param1":[10,20,30,440],"param2":[55,65,75,85],"param3":[43,55,71,72]}}

从一个名为rawData的表中检索数据。

现在想让数组内部的值非单调并将它们放入另一个表(seperateData)中的4个单独的行和列中,因此对于此示例,看起来像:

year  | month | day | param1 | param2 | param3

2017      7      2      10       55       43
2017      7      2      20       65       55
2017      7      2      30       75       71
2017      7      2      440      85       72

我猜测我必须用不拘一格的方式来达到这个目的,但要如何继续下去。数组param1,param2,param3的长度始终相同。

提问于
用户回答回答于
  SELECT   
      ((rawData.values)::json->'date')::json->'year' AS year
    , ((rawData.values)::json->'date')::json->'month' AS month
    , ((rawData.values)::json->'date')::json->'day' AS day  
    , JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param1') AS param1
    , GENERATE_SERIES(1, JSON_ARRAY_LENGTH(((rawData.values)::json->'data')::json->'param1')) AS param1_array_index
    , JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param2') AS param2   
    , GENERATE_SERIES(1, JSON_ARRAY_LENGTH(((rawData.values)::json->'data')::json->'param2')) AS param2_array_index    
    , JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param3') AS param3
    , GENERATE_SERIES(1, JSON_ARRAY_LENGTH(((rawData.values)::json->'data')::json->'param3')) AS param3_array_index        
  FROM
   rawData

扫码关注云+社区

领取腾讯云代金券