Как извлечь этот JSON в таблицу? - PullRequest
0 голосов
/ 04 июня 2018

У меня есть столбец sql, заполненный документом json, один для строки:

 [{
    "ID":"TOT",
    "type":"ABS",
    "value":"32.0"
    },

    {
    "ID":"T1",
    "type":"ABS",
    "value":"9.0"
    },

    {
    "ID":"T2",
    "type":"ABS",
    "value":"8.0"
     },

     {
     "ID":"T3",
     "type":"ABS",
     "value":"15.0"
  }]

Как можно преобразовать его в табличную форму?Я пытался с функциями красного смещения json_extract_path_text и JSON_EXTRACT_ARRAY_ELEMENT_TEXT, также я пытался с json_each и json_each_text (на postgres), но не получил ожидаемого ... какие-либо предложения?

желаемые результаты должнывыглядят так:

T1    T2    T3    TOT
9.0   8.0  15.0   32.0

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Ваш лучший вариант - использовать COPY из формата JSON .Это загрузит JSON непосредственно в обычный формат таблицы.Затем вы запрашиваете его как обычные данные.

Однако я подозреваю, что вам нужно будет немного изменить формат файла, удалив внешние квадратные скобки [...], а также запятые между записями, например:

{
    "ID": "TOT",
    "type": "ABS",
    "value": "32.0"
}
{
    "ID": "T1",
    "type": "ABS",
    "value": "9.0"
}

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

Или, в худшем случае, вы можете использовать одну из функций JSON для доступа к информации в поле JSON, но это очень неэффективнодля больших запросов (например, в предложении WHERE).

0 голосов
/ 04 июня 2018

Полагаю, вы напечатали 4 строки.В postgresql

SELECT this_column->'ID'
FROM   that_table;

будет возвращен столбец со строками JSON.Используйте ->>, если вы хотите текстовый столбец.Более подробная информация здесь: https://www.postgresql.org/docs/current/static/functions-json.html

В случае, если вы использовали какой-то старый Postgresql (до 9.3), это становится сложнее:)

...