如何将此 JSON 数据导入 postgresql table?
How to import this JSON data into a postgresql table?
我有以下 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”和“时间”导入到 table 中,如下所示:
时间
环境温度
HorizIrrad
2021-08-0211:00:00
7
632
2021-08-0212:00:00
10
884
或者像这样:
时间
字段集
值
2021-08-0211:00:00
环境温度
7
2021-08-0211:00:00
HorizIrrad
632
2021-08-0212:00:00
环境温度
10
2021-08-0212:00:00
HorizIrrad
884
使用函数jsonb_array_elements(jsonb)
,returns所有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')
中测试
我有以下 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”和“时间”导入到 table 中,如下所示:
时间 | 环境温度 | HorizIrrad |
---|---|---|
2021-08-0211:00:00 | 7 | 632 |
2021-08-0212:00:00 | 10 | 884 |
或者像这样:
时间 | 字段集 | 值 |
---|---|---|
2021-08-0211:00:00 | 环境温度 | 7 |
2021-08-0211:00:00 | HorizIrrad | 632 |
2021-08-0212:00:00 | 环境温度 | 10 |
2021-08-0212:00:00 | HorizIrrad | 884 |
使用函数jsonb_array_elements(jsonb)
,returns所有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')
中测试