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

时间:2016-01-29 13:23:07

标签: postgresql postgresql-9.3

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

即:

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

我想将其插入三个不同的表格中,分别为User,School和Year。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

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

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)

您现在要做的就是将操作员应用程序的结果插入到您选择的表中:

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

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

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

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

阅读documentation了解更多信息。