Заменить текстовый элемент json с помощью jsonb_set
Есть json вида:
{"id": null , "answer": [{"code": "22", "information": "Заявка не одобрена, не указаны персональные данные клиента"}], "status": "error"}
необходимо заменить данные в поле information. До этого получалось изменять числовые данные с помощью jsonb_set, в данном json не получается это осуществить.
Пробовала запросом
UPDATE statement set metadata = jsonb_set (metadata, array['answer', 'information'], '"Заявка не одобрена, не соответствует дата рождения клиента"')where id_jon = 'as2536'
Вероятнее всего не правильно составляю запрос, подскажити как решить проблему?
Ответы (1 шт):
Автор решения: Мелкий
→ Ссылка
"answer": [{
У вас массив объектов. Поэтому собственно jsonb_set вам даёт ошибку
ERROR: path element at position 2 is not an integer: "information"
Это не имеет отношения к типу изменяемого элемента, это про указанный путь до этого элемента. На втором уровне вложенности у вас массив, у json массива ключ не может быть строкой, только числом. Если указать, что нас интересует нулевой элемент массива array['answer', '0', 'information'] - то всё получится.
melkij=> select jsonb_set(
'{"id": null , "answer": [{"code": "22", "information": "Заявка не одобрена, не указаны персональные данные клиента"}], "status": "error"}',
array['answer', '0', 'information'], '"За"');
jsonb_set
----------------------------------------------------------------------------------
{"id": null, "answer": [{"code": "22", "information": "За"}], "status": "error"}