关于Json解析

有一个json,大致格式为
{“CAMERA_FL”: 81303, “LIDAR_FALCON”: 71349, “LIDAR_PROJECTED”: 71211}

想把它转为类似二维表的样式,例如有两列 名字分别为 device 和 num
device num
CAMERA_FL 81303
LIDAR_PROJECTED 71211
LIDAR_FALCON 71349

请问该怎么实现?

感谢各位大佬 我自己没有说清楚 这里边的key是不确定的 不确定个数 不确定key是什么 就是说 下一个json中 可能会有100对kv, key也不一定是CAMERA_FL CAMERA_FL了 需要根据key自动的变更

mysql> create table t_json(a json);
Query OK, 0 rows affected (1.04 sec)

mysql> 
mysql> insert into t_json(a) values('{"CAMERA_FL":81303, "LIDAR_FALCON":71349, "LIDAR_PROJECTED":71211}');
Query OK, 1 row affected (0.02 sec)

mysql> select * from t_json;
+-----------------------------------------------------------------------+
| a                                                                     |
+-----------------------------------------------------------------------+
| {"CAMERA_FL": 81303, "LIDAR_FALCON": 71349, "LIDAR_PROJECTED": 71211} |
+-----------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> select JSON_EXTRACT(a, "$.CAMERA_FL"),JSON_EXTRACT(a, "$.LIDAR_FALCON"),JSON_EXTRACT(a, "$.LIDAR_PROJECTED") from t_json;
+--------------------------------+-----------------------------------+--------------------------------------+
| JSON_EXTRACT(a, "$.CAMERA_FL") | JSON_EXTRACT(a, "$.LIDAR_FALCON") | JSON_EXTRACT(a, "$.LIDAR_PROJECTED") |
+--------------------------------+-----------------------------------+--------------------------------------+
| 81303                          | 71349                             | 71211                                |
+--------------------------------+-----------------------------------+--------------------------------------+
1 row in set (0.00 sec)

mysql> select "CAMERA_FL" device ,JSON_EXTRACT(a, "$.CAMERA_FL") num from t_json
    -> union all
    -> select "LIDAR_FALCON" device ,JSON_EXTRACT(a, "$.LIDAR_FALCON") num from t_json
    -> union all
    -> select "LIDAR_PROJECTED" device ,JSON_EXTRACT(a, "$.LIDAR_PROJECTED") num from t_json;
+-----------------+-------+
| device          | num   |
+-----------------+-------+
| LIDAR_PROJECTED | 71211 |
| LIDAR_FALCON    | 71349 |
| CAMERA_FL       | 81303 |
+-----------------+-------+
3 rows in set (0.01 sec)


1 个赞

json函数查询效率还可以吧

没在生产用过,不太清楚 :joy:

数据库的json处理函数效率很差,建议应用实现

同样建议走应用好些

数据库的json处理函数效率很差,建议应用实现

这个key是不定的 就是说 在这个json中 key有三个 CAMERA_FL LIDAR_FALCON LIDAR_PROJECTED,但是下一个json中 key可能会有100个 而且是100个其他值

还是搞到 python 之类的程序里转吧,有比较方便的函数。

key个数无法固定还是用还其语言比如python遍历后,提取要用的信息再保存入库吧,数据库层面比较费劲

数量不固定这样查不行吧

如果用mysql JSON_TABLE函数可以搞出来,tidb目前不支持这个

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。