在 Postgresql 中将字典列表 json 转换为 column/row 格式

Convert a json which is a list of dictionaries into column/row format in Postgresql

我有一个 json,它是具有以下语法的字典列表:

 [ 
     {
    "Date_and_Time": "Dec 29, 2017 15:35:37",
    "Componente": "Bar",
    "IP_Origen": "175.11.13.6",
    "IP_Destino": "81.18.119.864",
    "Country": "Brazil",
    "Age": "3"

},

{

    "Date_and_Time": "Dec 31, 2017 17:35:37",
    "Componente": "Foo",
    "IP_Origen": "176.11.13.6",
    "IP_Destino": "80.18.119.864",
    "Country": "France",
     'Id': '123456',
     'Car': 'Ferrari'

},
{
  "Date_and_Time": "Dec 31, 2017 17:35:37",
    "Age": "1",
    "Country": "France",
     'Id': '123456',
     'Car': 'Ferrari'
},
{
    "Date_and_Time": "Mar 31, 2018 14:35:37",
    "Componente": "Foo",
    "Country": "Germany",
     'Id': '2468',
     'Genre': 'Male'

}
]

json 确实很大,每个词典都有不同数量的 key/values 字段。我想要做的是在 postgresSQL 中创建一个 table,其中键代表一列,值代表一行。在上面解释的示例中,我希望 table 像这样:

Date_and_Time          | Componente | IP_Origen   | IP_Destino    | Country| Id    | Car    | Age| Genre
         
Dec 29, 2017 15:35:37  | Bar        | 175.11.13.6 | 81.18.119.864 | Brazil |  -    |   -    | 3  | -
Dec 31, 2017 17:35:37  | Foo        | 176.11.13.6 | 80.18.119.864 | France |123456 |Ferrari | -  | -
Dec 31, 2017 17:35:37  | -          | -           |   -           | France |123456 |Ferrari | 1  | -
Mar 31, 2018 14:35:37  | Foo        |   -         |    -          | Germany| 2468  |    -   | -  | Male

我能想到的唯一解决方案是将值一个一个地放置,但这根本没有效率

您可以使用 jsonb_to_recordsetjson 创建记录集,然后使用 insert into 插入记录。

insert into table
select * from jsonb_to_recordset('<your json>'::jsonb)
as rec(Date_and_Time datetime, Componente text, IP_Origen text) --Specify all columns inside the table

Sample DBFiddle