Получить все значения из вложенных JSON массивов в PostgreSQL - PullRequest
1 голос
/ 29 марта 2020

Я хочу извлечь весь массив app_indexe in abc, используя необработанный запрос. База данных, которую я использую 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"
    }

что мне нужно все значения в app_index из abc.

выход

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

1 Ответ

1 голос
/ 29 марта 2020

Вы можете удалить массив с помощью 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)

Демонстрация на DB Fiddle :

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