Разделение элементов json в массиве с помощью json_array в mySQL - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь получить некоторую информацию из таблицы базы данных mySQL, где я создаю столбец типа json. Здесь я ввожу полный массив json, состоящий из отдельных jsons.

{"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"}

Поэтому я пытаюсь получить отдельные jsons, используя json_array () и json_object (), а затем получить их соответствующие значения.

Я попытался ввести json просто как:

{"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"}

или в виде массива, например:

[{"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"}]

или в формате json:

{{"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 json_object(js,'Date'), json_object(js,'TableName'), json_object(js,'Count') from (select json_array(jsondata) as js);

, где jsondata - имя столбца, в котором присутствуют вышеуказанные записи.

Но я получаю результат eveytime в этом формате.

{"[\"{\\\"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\\\"}\"]": "Date"} | {"[\"{\\\"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"} | {"[\"{\\\"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\\\"}\"]": "Count"}

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

1 Ответ

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

Вы можете сделать это командойбудет в правильной таблице, как показано здесь:

create table tbl2 (id int auto_increment primary key, refid int, tdate date, tname nvarchar(32), tcount int);

INSERT INTO tbl2 (refid, tdate, tname, tcount) 
  VALUES (1,'2019-09-30','es_apn_1',3),
         (1,'2019-09-30','es_response_1',297),
         (1,'2019-09-30','es_group_1',356);

При таком дизайне содержащиеся в нем данные намного легче доступны для поиска или JOIN s с другими таблицами ...

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