2017-08-16 164 views
1

下面是列名元和表名层中的json数据。 在这里,我检索'网页'键的元数据 - >'网页'的数据,但我不知道如何获得'lable'键值,这是一个数组元素的'字段',这又是一个数组页面。如何从数组中的postgresql json数组字段中获取数据

{ 
    "id":1, 
    "name":"org_details", 
    "action":"organisation.php", 
    "lable":"Manage Organisation", 
    "pages":[ 
     { 
     "name":"Create Org", 
     "lable":"Organisation Name", 
     "fields":[ 
      { 
       "id":11, 
       "type":1, 
       "subtype":1, 
       "lable":"Organisation Name" 
      }, 
      { 
       "id":12, 
       "type":2, 
       "subtype":1, 
       "lable":"Description", 
       "mandatory":TRUE, 
       "validations":{ 
        "minl":2, 
        "maxl":60 
       } 
      }, 
      { 
       "id":13, 
       "type":3, 
       "subtype":1, 
       "lable":"Org. Type", 
       "default value":1, 
       "mandatory":TRUE, 
       "choices":[ 
        { 
        "lable":"OFSDP", 
        "value":1 
        }, 
        { 
        "lable":"AGRICULTURE", 
        "value":2 
        }, 
        { 
        "lable":"HUTICULTURE", 
        "value":3 
        } 
       ] 
      }, 
      { 
       "id":14, 
       "type":4, 
       "lable":"checkbox", 
       "default value":1 
      }, 
      { 
       "id":15, 
       "type":5, 
       "subtype":1, 
       "lable":"Upload", 
       "mandatory":TRUE 
      }, 
      { 
       "id":16, 
       "type":6, 
       "subtype":1, 
       "lable":"GIS" 
      }, 
      { 
       "id":17, 
       "type":7, 
       "subtype":1, 
       "lable":"Date" 
      }, 
      { 
       "id":18, 
       "type":8, 
       "lable":"Attachment" 
      } 
     ] 
     } 
    ] 
} 
+0

Postgre文档是我见过的最好的。 JSON页面在这里。 https://www.postgresql.org/docs/current/static/functions-json.html – Mokadillion

+0

是的,我读了那些,但无法得到它。 – Avinash

+0

我的postgres不接受'TRUE',只好用'“TRUE”或'true'替换它。 – Andomar

回答

1

一种方式与json_array_elements

(假设你的表是your_table和json列名是meta

select j.value->>'lable' 
from your_table 
join lateral json_array_elements(meta->'pages'->0->'fields') j 
on true 
1

你可以索引由数字数组:

select meta::jsonb->'pages'->0->'lable' 
from layer 

要检索的所有组织的 “标贴”,创建一个表jsonb_to_recordset

select orgs.lable 
from layer 
cross join 
     jsonb_to_recordset(meta::jsonb->'pages') orgs(name text, lable text) 

的第二个参数jsonb_to_recordset定义您感兴趣的列。在这里,我使用orgs(name text, lable text)使名称和标签可用。

要获得一个嵌套的JSON字典的值,可以使用横向联接:

select orgs.lable 
,  fields.lable 
from layer 
cross join 
     jsonb_to_recordset(meta::jsonb->'pages') 
      orgs(lable text, fields jsonb) 
cross join 
     jsonb_to_recordset(fields) fields(lable text) 

Working example at regtester.

+0

想检索值:Organization Name,Description,Org。类型,复选框,上传,地理信息系统,日期,附件 – Avinash

+0

你是什么意思<你的json在这里> – Avinash

+0

替换<你的json在这里>在层表上选择 – Andomar

相关问题