Мне нужно отобразить данные из списка JSON с каждым ключом в виде отдельного столбца - PullRequest
2 голосов
/ 03 октября 2019

Я использую Maria Db или PostgreSQL в качестве базы данных.

Я создал таблицу с одним столбцом типа json.

CREATE TABLE sample(jsondata json);

И в этом столбце я вставляю список jsons, которые похожи друг на друга, и отличаются только значения.

INSERT INTO sample VALUES('[{"Date": "2019-09-30", "TableName": "es_apn_1", "Count": "3"}, {"Date": "2019-09-30", "TableName": "es_response_1", "Count": "297"}, {"Date": "2019-09-30", "TableName": "es_group_1", "Count": "356"}]');

Я хочу получить свой результат из одного запроса, который отображаетключи, такие как здесь Дата , TableName и Count в виде отдельных столбцов, и значения там отображаются в соответствующих строках, поэтому здесь будут три отдельные строки. Я пробовал несколько функций json_value, json_extract и многие другие, но все еще не смог понять это.

Может кто-нибудь предложить решение, используя функцию в Maria DB или изменив структуру Json?

Спасибо и С уважением.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Вы можете использовать функцию json_array_elements() для PostgreSQL:

select js ->> 'Date' as Date, js ->> 'TableName' as TableName, js ->> 'Count' as Count 
  from
  (
    select json_array_elements(jsondata) as js
      from sample
  ) q

Демо

0 голосов
/ 03 октября 2019

Вы неправильно вставляете данные. Вот как вы должны вставлять данные:

INSERT INTO sample
VALUES ('{"Date": "2019-09-30", "TableName": "es_apn_1", "Count": "3"}'),
       ('{"Date": "2019-09-30", "TableName": "es_response_1", "Count": "297"}'),
       ('{"Date": "2019-09-30", "TableName": "es_group_1", "Count": "356"}');

И чтобы получить желаемый результат, вы можете сделать это:

SELECT jsondata -> 'Date' AS Date, jsondata -> 'TableName' AS TableName, jsondata -> 'Count' AS Count FROM sample;

Вы можете проверить рабочий пример здесь: дБ <> скрипка

Выход:

Output

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