从 PostgreSQL 中的嵌套 JSON 数组中获取所有值

Get all the values from nested JSON arrays in PostgreSQL

我想使用原始查询提取 abc 数组中的所有 app_indexe。我使用的数据库是 PostgreSQL 10.9。我成功地能够提取到 abc 键。我能够得到的是通过传递数组的索引号。但我想要所有 app_index.

没有索引:

select v_info->'abc' from table1

索引: select v_info->'abc'->>0 from table1

{
        "id": 1406711300166,
        "abc": [ 
            {
                "am": "1.74",
                "am_set": {
                    "sh_mon": {
                        "am": "1.74",
                        "cur_code": "ABC"
                    },
                    "pre_money": {
                        "amount": "1.74",
                        "code": "ABC"
                    }
                },
                "app_index": 0
            },
           {
                "am": "1.74",
                "am_set": {
                    "sh_mon": {
                        "am": "1.74",
                        "cur_code": "ABC"
                    },
                    "pre_money": {
                        "amount": "1.74",
                        "code": "ABC"
                    }
                },
                "app_index": 1
            }
        ],
        "xyx": 0,
        "zyx": "random var"
    }

我需要的是abcapp_index中的所有值。

输出

abc_index
----------
0
1

您可以使用 json(b)_array_elements() 取消嵌套数组,然后只访问属性 app_index:

的值
select el -> 'app_index' abc_index
from mytable t
cross join lateral jsonb_array_elements(t.v_info -> 'abc') a(el)

Demo on DB Fiddle:

| abc_index |
| :-------- |
| 0         |
| 1         |