【问题标题】:Exracting Fields from JSON array从 JSON 数组中提取字段
【发布时间】:2016-01-07 12:12:14
【问题描述】:

我的桌子

create table i (a json)

插入:

insert into i values ('[[1300,[{"id":5,"time":1451423706048,"zon":0,"name":"AMighty","loc":"ny"},[[3405,0,1000],[35,0,1000],[3401,0,10000],[2541,0,1000]]]]]' )

我希望提取 2541 之后的字段。在这种情况下,答案是 0

当查询我的 Json 时:

select json_array_elements(a) from I

它只返回一行。

【问题讨论】:

    标签: sql arrays json postgresql postgresql-json


    【解决方案1】:

    你需要遍历所有的嵌套数组来获取必要的元素:

    WITH i(a) AS ( VALUES
      ('[[1300,[{"id":5,"time":1451423706048,"zon":0,"name":"AMighty","loc":"ny"},[[3405,0,1000],[35,0,1000],[3401,0,10000],[2541,0,1000]]]]]'::JSON)
    )
    SELECT
      array_element->1->1->3 as array_you_look_for,
      array_element->1->1->3->1 as inner_array_element
    FROM i,
      json_array_elements(a) as array_element;
    

    输出:

     array_you_look_for | inner_array_element 
    --------------------+---------------------
     [2541,0,1000]      | 0
    (1 row)
    

    【讨论】:

    • 你能澄清一下这个语法吗:FROM i, json_array_elements(a) as array_element;创建了什么关系?
    • 什么意思?在FROM 子句之后,您可以指定一个或多个 来源以供选择 - 检查postgresql.org/docs/9.4/static/sql-select.html @koriander
    • 我不熟悉 postgresql 的特性,该页面在这一点上不清楚,但逗号通常是笛卡尔连接,所以第二部分应该是关系。但是 json_array_elements(a) 怎么知道它指的是表 i 的字段 'a'。
    • 为什么不简单地从 i 中选择 a->0->1->1->3->1
    • 德米特里,有没有我可以把 2541 作为一个字段而不是按位置的地方?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    相关资源
    最近更新 更多