Преобразование ввода для поля JSON - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть данные, которые выглядят так:

[{"key": "key1", "value": "value1"}, {"key": "key2", "value": "value2"}, ...]

Я хочу сохранить их в поле jsonb в следующем формате:

{"key1": "value1", "key2": "value2", ...}

Возможно ли преобразовать исходный массивJSON в postgres в insert времени или мой единственный вариант - преобразовать его раньше в приложении?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

demo: db <> fiddle

SELECT
    jsonb_object_agg(elem ->> 'key', elem ->> 'value')
FROM (
    SELECT jsonb_array_elements('[{"key": "key1", "value": "value1"}, {"key": "key2", "value": "value2"}]'::jsonb) elem
) s
  1. Разверните элементы массива в одну строку каждый (jsonb_array_elements)
  2. Объедините их вместе (jsonb_object_agg) путем извлечения значения key в качестве нового ключа и того же с value
0 голосов
/ 24 сентября 2018

Это все о том, как вы выполняете запрос для извлечения данных, используемой платформе, ... нужна дополнительная информация, чтобы ответить.

Чтобы отформатировать JSON, как вы хотите, я буду использовать карту() функция так:

var initialArray = [{"key": "key1", "value": "value1"}, {"key": "key2", "value": "value2"}, ...];

var newArray = initialArray .map(function (el) {
   var obj=new Object;
   obj[el["key"]]=el["value"];
   return(obj);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...