mysql - 在mySQL中使用json_array分割数组中的json元素

标签 mysql json database mariadb

我正在尝试从 mySQL 数据库表中检索一些信息,我在该表中创建了 json 类型的列。在这里,我输入一个由各个 json 组成的完整 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"}

所以我尝试使用 json_array() 和 json_object() 获取单独的 json,然后获取它们各自的值。

我尝试输入 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 是存在上述条目的列的名称。

但是我每次都会以这种格式得到结果。

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

您可以帮助我解决查询或我应该插入条目以正确获得所需输出的格式吗?

最佳答案

您可以使用以下命令来完成此操作:

CREATE TABLE tbl (id int auto_increment primary key, jdat json);

INSERT INTO tbl (jdat) 
  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 JSON_EXTRACT(jdat,'$[0].Date') from tbl

在这里查看我的小演示:https://rextester.com/DPQ80237

正如 @Raymond Nijland 所说的非常正确,存储此类信息的推荐方法是在适当的表中,如下所示:

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...

关于mysql - 在mySQL中使用json_array分割数组中的json元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58232930/

相关文章:

php - 使用 LIKE 和撇号的 Mysql 查询问题

php - 如何使用行数据用 PHP 解析 MySQL 表的结果?

json - 构建触发器函数以使用 postgres 处理 json 数据

c# - "The expected lock file doesn' 存在。请在我这样做后立即运行 "dnu restore"

javascript - 在两个 JSON 数组的条件下合并两个 JSON 对象

python - 在 Web2py 上显示文件夹中的一组图像

mysql - 更改字符串中的一个单词时更新多个字段?

php - 关于SQL注入(inject)中set id=1 and password = ' '

java - 无法使用 JDBC 连接到 docker 中的本地 MySQL

MySQL 多列、单查询