Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Json запрос с условием. Нужно вернуть без скобок  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 363
Есть работа с json объектами. К примеру:

# select jsonb_path_query('{"a":{"ary2":"s1","b2":2},"k1":"l"}', '$.*."ary2"');
 jsonb_path_query 
------------------
 "s1"


Если же написать :

Select '{"a":{"ary2":"s1","b2":2},"k1":"l"}'::jsonb#>>'{"a", "ary2"}' то вернут текст без кавычек.

# Select '{"a":{"ary2":"s1","b2":2},"k1":"l"}'::jsonb#>>'{"a", "ary2"}' as itog;
 itog 
------
 s1
(1 строка)


Вопрос: как это можно сделать (вернуть текст без двойных кавычек) в первом варианте с применением фильтра/условий.
Перепробовал все, фантазия иссякла.
Нужно вытаскивать данные с большого массива сложно вложенных элементов (до 5 уровней и с жуткими названиями ключей по 30-50 символов).
Вручную прописывать пути - это нереально.

Вариант с заменой кавычек (с их удалением из текста) как то не хочется использовать, т.к. в текстах встречаются двойные кавычки и они тогда будут удалены.

.

Сообщение было отредактировано: 10 ноя 21, 15:54
10 ноя 21, 15:52    [22394278]     Ответить | Цитировать Сообщить модератору
 Re: Json запрос с условием. Нужно вернуть без скобок  [new]
maxkar
Member

Откуда:
Сообщений: 176
О-О-О,

jsonb_path_query возвращает jsonb. А вот #>> возвращает текст. Поэтому можно, например, сконвертировать явно:

# select a #>> '{}' from (select jsonb_path_query('{"a":{"ary2":"s1","b2":2},"k1":"l"}', '$.*."ary2"') as A) items;
 ?column? 
-------
 s1
10 ноя 21, 19:28    [22394391]     Ответить | Цитировать Сообщить модератору
 Re: Json запрос с условием. Нужно вернуть без скобок  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 363
maxkar
О-О-О,

jsonb_path_query возвращает jsonb. А вот #>> возвращает текст. Поэтому можно, например, сконвертировать явно:

# select a #>> '{}' from (select jsonb_path_query('{"a":{"ary2":"s1","b2":2},"k1":"l"}', '$.*."ary2"') as A) items;
 ?column? 
-------
 s1


Maxxar, спасибо.
11 ноя 21, 17:18    [22394736]     Ответить | Цитировать Сообщить модератору
 Re: Json запрос с условием. Нужно вернуть без скобок  [new]
О-О-О
Member

Откуда: Нижний Новгород
Сообщений: 363
Вчера еще один вариант на работе сказали. Может даже кому то будет удобнее.

Я так понимаю его в учебнике нет.
postgres=# select jsonb_path_query('{"a":{"ary2":"s1","b2":2},"k1":"l"}', '$.*."ary2"')->>0;
 ?column? 
----------
 s1
(1 строка)

.
11 ноя 21, 17:21    [22394742]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить