Arrays postgresql 9.4或9.5中json对象嵌套数组中的查询元素

Arrays postgresql 9.4或9.5中json对象嵌套数组中的查询元素,arrays,json,postgresql,Arrays,Json,Postgresql,我在postgresql数据库中存储了上述格式的json对象。每个对象由关于某个学生的信息和注册信息组成。我在数组中有嵌套数组的复杂对象。我正在尝试选择info数组中的所有元素。我尝试使用以下查询: { "studentID": 1, "StudentName": "jhon", "Data":{ "schoolname":"school1", "enrolmentInfo": [{ "year":"2015

我在postgresql数据库中存储了上述格式的json对象。每个对象由关于某个学生的信息和注册信息组成。我在数组中有嵌套数组的复杂对象。我正在尝试选择info数组中的所有元素。我尝试使用以下查询:

{
  "studentID": 1,
  "StudentName": "jhon",
   "Data":{
     "schoolname":"school1",
     "enrolmentInfo":
           [{  
              "year":"2015",
              "info": 
                    [
                     {
                      "courseID":"csc213",
                      "school":"IT",
                      "enrollmentdate":"2015-01-01",
                      "finshdate":"2015-07-01",
                      "grade": 80 },

                      {
                      "courseID":"csc113",
                      "school":"IT1",
                      "enrollmentdate":"2015-09-02",
                      "finshdate":null,
                      "grade": 90 } ]
               },
             {  
              "year":"2014",
              "info": 
                    [{
                      "courseID":"info233",
                      "school":"IT",
                      "enrollmentdate":"2014-03-11",
                      "finshdate":"2014-09-01",
                      "grade": 81 },

                      {
                      "courseID":"csc783",
                      "school":"IT",
                      "enrollmentdate":"2014-01-02",
                      "finshdate":"2014-08-01",
                      "grade": 87 } ]
              }  ]
        }

     }

此查询不起作用,并出现以下错误:无法对标量调用json_数组_元素。是否有任何其他查询可用于提取嵌套数组的元素信息???

专门用于。由于您似乎没有使用此库,因此我删除了标记。请提供有效的json值。这一个有多个语法错误,缺少双引号和逗号。你为什么在要求9.4或9.5的时候给[postgres-9.3]加上标签呢?谢谢你,它工作得很好。我有一个小问题:如果数组元素中有另一组元素。例如,courseID:{coursename:computer science,coursecode:csc213},我们如何选择coursename和coursecode?如果你有嵌套的文档,你可以使用->记法-info\u项->'courseID'>>'coursename'我想用信息选择年份,我尝试了这个方法:用信息数据作为选择注册信息->信息作为信息,入学信息->'year'作为jsontesting t的年份,json\u array\u elementst.data->'data'>'enrolmentInfo'作为入学信息选择年份,信息项->>'courseID',信息项->>'school',信息项->'EnrolmentDate',信息项->>'finshdate',信息项->>'grade'来自信息数据idata,json_array_elementsidata.info作为info_项,到_jsonidata.yr作为年份@DmitryThis查询在“info”数组不为空时工作正常,但在某些情况下,我的年份没有信息,但我想要年份。示例:enrolmentInfo:[{year:2015,info:[]}]在本例中,查询不返回年份。如果“info”数组为空,如何返回年份。@Dmitry@R.Y.H你能用额外的JSON结构更新这个问题吗?
 with recursive x (info) as (select value->'info' from jsontesting r,  json_array_elements(r.data->'Data'->'enrolmentinfo') 
 UNION ALL 
 SELECT  (e).value->'courseID', (e).value->'school', (e).value->'grade',(e).value->'enrollmentdate', (e).value->'finshdate'   
 from (select json_each(json_array_elements (info)) e from x) p)
 select * from x;
-- assuming that jsontesting.data contains your JSON    
WITH info_data AS (
   SELECT enrolment_info->'info' AS info
   FROM jsontesting t, json_array_elements(t.data -> 'Data' -> 'enrolmentInfo') AS enrolment_info
)
SELECT info_item->>'courseID',
       info_item->>'school',
       info_item->>'enrollmentdate',
       info_item->>'finshdate',
       info_item->>'grade'
FROM info_data idata, json_array_elements(idata.info) AS info_item;