Манипулировать вложенными JSON in Postgres - PullRequest
2 голосов
/ 16 марта 2020

Я относительно новичок в postgres, и у меня проблема с манипулированием вложенными JSON массивами.

Моя JSON структура:

{
  "rows":[
    {
      "columns":[
        [
          {
            "text":"Some text",
            "type":"report"
          },
          {
            "type":"feedback"
          }
        ],
        [
          {
            "key":"p0",
            "type":"publications",
            "title":""
          }
        ]
      ]
    },
    {
      "columns":[
        [
          {
            "key":"p1",
            "type":"publication",
            "title":""
          }
        ]
      ]
    }
  ]
}

Как видите, структура json немного избыточна, что делает ее еще более сложной. Моя цель состоит в том, чтобы просто добавить новый элемент заголовка в каждый вложенный столбец type="report" (как уже есть для type="publication").

В настоящее время я перебираю массивы и пытаюсь восстановить измененный json структурировать снова через конкатенацию, но это утомительный и раздражающий процесс для этой простой задачи.

FOR currentColumn IN SELECT * FROM json_array_elements(extractedRows)
    -- more for loops to get to the type="publication" elements
    -- set the new title element
    SELECT jsonb_set(...) into result;
    -- finally reconstruct the json and persist it
END LOOP;

Есть ли умный способ сделать это более эффективно? Я прочитал документацию, но мне трудно найти лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...