172 похожих чатов

Добрый день. Не получается из json вытащить данные по имени :( Вот

создание временной таблички для опытов:

DROP TABLE IF EXISTS tmp_test;
create temp table tmp_test(content_data text);


INSERT INTO tmp_test SELECT '[
{
"name": "Пачка 229",
"tiles": [
{
"code": "007",
"name": "Бензин АИ-92"
},
{
"code": "004",
"name": "Бензин АИ-95"
}
]

},
{
"name": "Пачка 230",
"tiles": [
{
"code": "009",
"name": "Бензин АИ-80"
},
{
"code": "010",
"name": "Бензин АИ-95 супер"
}
]

}
]';


Обращение по номеру работает:



postgres=# SELECT content_data::jsonb->0 FROM tmp_test;
?column?
--------------------------------------------------------------------------------------------------------------------
{"name": "Пачка 229", "tiles": [{"code": "007", "name": "Бензин АИ-92"}, {"code": "004", "name": "Бензин АИ-95"}]}
(1 row)

postgres=# SELECT content_data::jsonb->1 FROM tmp_test;
?column?
--------------------------------------------------------------------------------------------------------------------------
{"name": "Пачка 230", "tiles": [{"code": "009", "name": "Бензин АИ-80"}, {"code": "010", "name": "Бензин АИ-95 супер"}]}
(1 row)



А вот по имени ничего не выводит:
postgres=# SELECT content_data::jsonb->'name' FROM tmp_test;
?column?
----------

(1 row)


Подскажите пожалуйста как сделать чтобы содержание json вывел по имени?

тут какая-то простешая ошибка похоже..

9 ответов

15 просмотров
***-*** Автор вопроса

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

*** ***
здесь похоже что сразу идут массивы, без ключ-знач...

Ну если нужно имя из конкретного элемента массива, то так: SELECT content_data::jsonb -> 0 ->> 'name' FROM tmp_test;

***-*** Автор вопроса
Nick Nalbantov
Ну если нужно имя из конкретного элемента массива,...

Да, так работает, спасибо 😊 А можно как-то всё вывести, где ключ-значение определенное? Например: "code": "009" При этом неизвестно в каком эллементе массива оно встретится (

*** ***
Да, так работает, спасибо 😊 А можно как-то всё вы...

select jsonb_path_query(content_data::jsonb, '$[*] ? (@.tiles[*].code == $val)', '{"val": "009"}') from tmp_test; https://www.postgresql.org/docs/current/functions-json.html

***-*** Автор вопроса
***-*** Автор вопроса
*** ***
в 11-й версии не работает (

Обновить версию не вариант?

***-*** Автор вопроса
*** ***
в 11-й версии не работает (

Тогда две опции: 1. Разобрать JSON в плоскую таблицу с помощью jsonb_to_record, и дальше уже работать с нормальными таблицами 2. Уведомить начальство и ИБ, что у PG 11 в ноябре 2023 (через месяц) наступает End-of-Life, пора обновиться хотя бы на PG 15

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта