Postgres JSONB поле в массив - PullRequest
0 голосов
/ 18 марта 2020

Я просматривал документацию Postgres Jsonb, но не смог найти решение для небольшой проблемы, с которой я столкнулся.

У меня есть таблица: MY_TABLE

, которая имеет следующие столбцы:

Пользователь, Имя, Данные и Закупленные

Следует отметить, что «Данные» является jsonb и имеет несколько полей. Одним из полей внутри «данных» является «Атрибут», но в настоящее время это строка. Как я могу go изменить это на список строк?

Я пытался использовать json_build_array, но мне не повезло

Так, например, я бы хотел, чтобы мой jsonb выглядел например:

   {
       "Id": 1,
       "Attributes": ["Test"]

   }

вместо

{
    "Id": 1,
    "Attributes": "Test"

}

Меня интересует только поле "Атрибуты" внутри Json, а не любые другие поля.

Я также хочу убедиться, что для некоторых атрибутов, которые имеют пустую строку «Атрибуты»: «», они отображаются в пустой список, а не в список с пустой строкой ([] not ["»])

1 Ответ

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

Вы можете использовать jsonb_set() и некоторые условные логи c для пустой строки:

jsonb_set(
    mycol,
    '{Attributes}',
    case when js ->> 'Attributes' <> '' 
        then jsonb_build_array(js ->> 'Attributes')
        else '[]'::jsonb
    end
)
...