如何将此 JSON 数据导入 postgresql 表?

Posted

技术标签:

【中文标题】如何将此 JSON 数据导入 postgresql 表?【英文标题】:How to import this JSON data into a postgresql table? 【发布时间】:2021-10-08 05:18:34 【问题描述】:

我有以下 JSON:


   "ticket":
      "ticket":"61086762bb68d90001148fe9",
      "timestamp":"2021-08-02T18:45:06.581-0300"
   ,
   "serie":
      "measurement":
         "nemo":"RT",
         "description":"Real Time"
      ,
      "tagSet":
         "Granularity":"1h",
         "Facility":"382"
      ,
      "fieldSet":
         "EnvTemperature":"°C",
         "HorizIrrad":"W/m²"
      
   ,
   "values":[
      
         "tagSet":
            "Facility":"382",
            "Granularity":"1h"
         ,
         "fieldSet":
            "EnvTemperature":7.0,
            "HorizIrrad":632.0
         ,
         "time":"2021-08-02T11:00:00.000-0300"
      ,
      
         "tagSet":
            "Facility":"382",
            "Granularity":"1h"
         ,
         "fieldSet":
            "EnvTemperature":10.0,
            "HorizIrrad":884.0
         ,
         "time":"2021-08-02T12:00:00.000-0300"
      
   ]

我想知道如何将“值”部分中的“EnvTemperature”、“HorizIrrad”和“时间”导入如下表格:

time EnvTemperature HorizIrrad
2021-08-02 11:00:00 7 632
2021-08-02 12:00:00 10 884

或者像这样:

time Fieldset value
2021-08-02 11:00:00 EnvTemperature 7
2021-08-02 11:00:00 HorizIrrad 632
2021-08-02 12:00:00 EnvTemperature 10
2021-08-02 12:00:00 HorizIrrad 884

【问题讨论】:

【参考方案1】:

使用函数jsonb_array_elements(jsonb)将所有json数组元素返回为value

select 
    (value->>'time')::timestamp as "time",
    (value->'fieldSet'->>'EnvTemperature')::numeric as "EnvTemperature",
    (value->'fieldSet'->>'HorizIrrad')::numeric as "HorizIrrad"
from the_data
cross join jsonb_array_elements(json_col->'values')

在Db<>fiddle.中测试它

阅读JSON Functions and Operators.

【讨论】:

以上是关于如何将此 JSON 数据导入 postgresql 表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中使用 PostgreSQL 9.2 JSON 数据类型?

如何定期将大型 JSON 数据集导入 Cloud Firestore?

PostgreSQL如何导入数据

如何在 JSON 文件中导出对象数组,然后使用 es6 导入 [重复]

如何将此 postgresql 滞后语句移植到 mysql?

转义制表符 PostgreSQL