如何将 json 数组传递给 postgresql 函数

How to pass json array to postgresql function

我有一个 json 对象包含 json 数组。

即:

{
    ID:'1',
    Name:'Pooja',
    School:[{Name:'ABC',Address:'Nagpur'},{Name:'CDF'},{Name:'GHI',Year:{From:'2015',To:'2016'}}]
}

我想将其插入三个不同的 table 作为用户、学校和年份。

有人可以帮忙吗?

假设我理解正确,您想拆分提供的 JSON 对象并将其子对象写入某些 tables。

PostgreSQL 有几个 JSON 运算符可能会有所帮助。

首先,您应该将 JSON 的文本表示转换为类型 json。这允许您使用 JSON 运算符和函数,例如 ->(获取 JSON 对象字段):

select
'{
   "ID":1,
   "Name":"Pooja",
   "School":[
      {
         "Name":"ABC",
         "Address":"Nagpur"
      },
      {
         "Name":"CDF"
      },
      {
         "Name":"GHI",
         "Year":{
            "From":"2015",
            "To":"2016"
         }
      }
   ]
}'::json -> 'Name';

 ?column? 
----------
 Pooja
(1 row)

或者,例如,#>(在指定路径获取 JSON 对象):

select 'YOUR_JSON'::json #> '{"School", 2, "Year"}';

          ?column?          
----------------------------
 {                         +
             "From":"2015",+
             "To":"2016"   +
          }
(1 row)

您现在要做的就是将运算符应用程序的结果插入您选择的 table:

insert into user select 'YOUR_JSON'::json -> 'Name';

如果您只想提取 School 数组,您仍然可以使用 -> 运算符:

select 'YOUR_JSON'::json -> 'School';

          ?column?           
-----------------------------
 [                          +
       {                    +
          "Name":"ABC",     +
          "Address":"Nagpur"+
       },                   +
       {                    +
          "Name":"CDF"      +
       },                   +
       {                    +
          "Name":"GHI",     +
          "Year":{          +
             "From":"2015", +
             "To":"2016"    +
          }                 +
       }                    +
    ]
(1 row)

阅读 documentation 了解更多。