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

Ребята всем привет! Если у меня хранится в постгресе поле

objects типа json [{"tag": "x"}, {"tag": "y"}, {"tag": "z"}]
как я могу из этого поля вытянуть все tag в отдельный массив, собрать с каждого объекта, чтоб полчился в итоге следущий результат селекта ["x", "y", "z"] ? так можно сделать?

19 ответов

7 просмотров

jsonb же?

Александр-Орловский Автор вопроса
Pavel Mozhchil
jsonb же?

Нет, тип в БД у этого поля просто json

json_field::json#>'{tag}'

но по моему это не классический json объект На верхнем уровне у json должен быть тип map[string]interface

Александр-Орловский Автор вопроса
Pavel Mozhchil
json_field::json#>'{tag}'

Сейчас попробую, спасибо

Alex
с чего вы взяли?

Ну ок Есть два типа []json и json_object

Alex
где есть?

мы что будем это обсуждать) ? Или все таки предложите решение?

Александр-Орловский Автор вопроса
Pavel Mozhchil
json_field::json#>'{tag}'

что то не сработало, select вернул null. а pgadmin подсказывает что поле действительно типа json: https://i.imgur.com/ecFnB9t.png

Pavel Mozhchil
Пруфы бы

https://datatracker.ietf.org/doc/html/rfc8259

Alex
https://datatracker.ietf.org/doc/html/rfc8259

ну ок но в спецификации явно указано деление begin-array и begin-object и подходы для их разбора разные

create table temp.data ( id bigserial, json_field json ); insert into temp.data (json_field) values ('[{"tag": "x"}, {"tag": "y"}, {"tag": "z"}]'), ('[{"tag": "x"}, {"tag": "y"}]'); select id , json_agg(tag_value) as json_new_field from ( select id , json_array_elements(json_field) ->> 'tag' as tag_value from temp.data ) s group by id сложновато, конечно

Pavel Mozhchil
ну ок но в спецификации явно указано деление begin...

ну логично блин, что array начинается с квадратной скобки, а object с фигурной. важно вот это: JSON-text = ws value ws value = false / null / true / object / array / number / string

Александр-Орловский Автор вопроса
Anton Shelishkevich
create table temp.data ( id bigserial,...

спасибо, сложновато, но работает как раз как нужно) думал как то попроще можно, но что то похоже нет)

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

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

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Подскажите, можно ведь комбинировать запись данных в один и тот же Stream через TFileStream и через TCompressionStream поочерёдно? Ну т.е. часть данных мне нужно сжать, часть ...
notme
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати на работу никто не хочет, слегка на Сшке подписывать? От 170к в месяц, под Москвой
Andrey Ermakov
6
Карта сайта