如何使用 SQL、mysql 从 json 中提取和压缩值
how to extract and zip values from json with SQL, mysql
我很难从 MySQL 的 JSON 列中提取所需的值。
想象一下变量:
SET @j = '[{"a": 1, "b": 2},{"a": 3, "b": 4, "c": {"d": 4}}, {"a": 5}]';
并且我需要提取和 return 一个新的 JSON 数组,该数组仅包含选定的键值对,例如:仅 a 和 b,如果所需的键不存在,我想return 该键为空:
[{"a": 1, "b": 2},{"a": 3, "b": 4},{"a": 5, "b": null}]
谢谢
这是一个使用 MySQL 8.0 的 JSON_TABLE() function 的解决方案:
mysql> SET @j = '[{"a": 1, "b": 2},{"a": 3, "b": 4, "c": {"d": 4}}, {"a": 5}]';
Query OK, 0 rows affected (0.00 sec)
mysql> select j.* from json_table(@j, '$[*]'
columns (a int path '$.a', b int path '$.b')) as j;
+------+------+
| a | b |
+------+------+
| 1 | 2 |
| 3 | 4 |
| 5 | NULL |
+------+------+
3 rows in set (0.00 sec)
基于这个结果,我们可以构建一个新的 JSON 对象数组:
mysql> select json_arrayagg(json_object('a', j.a, 'b', j.b)) as new
from json_table(@j, '$[*]'
columns (a int path '$.a', b int path '$.b')) as j;
+-----------------------------------------------------------+
| new |
+-----------------------------------------------------------+
| [{"a": 1, "b": 2}, {"a": 3, "b": 4}, {"a": 5, "b": null}] |
+-----------------------------------------------------------+
如果您正在使用 MySQL 5.x,我建议您将整个 JSON 文档提取到客户端应用程序中,您可以在其中将其反序列化为数据结构以在代码中进行操作。
我很难从 MySQL 的 JSON 列中提取所需的值。 想象一下变量:
SET @j = '[{"a": 1, "b": 2},{"a": 3, "b": 4, "c": {"d": 4}}, {"a": 5}]';
并且我需要提取和 return 一个新的 JSON 数组,该数组仅包含选定的键值对,例如:仅 a 和 b,如果所需的键不存在,我想return 该键为空:
[{"a": 1, "b": 2},{"a": 3, "b": 4},{"a": 5, "b": null}]
谢谢
这是一个使用 MySQL 8.0 的 JSON_TABLE() function 的解决方案:
mysql> SET @j = '[{"a": 1, "b": 2},{"a": 3, "b": 4, "c": {"d": 4}}, {"a": 5}]';
Query OK, 0 rows affected (0.00 sec)
mysql> select j.* from json_table(@j, '$[*]'
columns (a int path '$.a', b int path '$.b')) as j;
+------+------+
| a | b |
+------+------+
| 1 | 2 |
| 3 | 4 |
| 5 | NULL |
+------+------+
3 rows in set (0.00 sec)
基于这个结果,我们可以构建一个新的 JSON 对象数组:
mysql> select json_arrayagg(json_object('a', j.a, 'b', j.b)) as new
from json_table(@j, '$[*]'
columns (a int path '$.a', b int path '$.b')) as j;
+-----------------------------------------------------------+
| new |
+-----------------------------------------------------------+
| [{"a": 1, "b": 2}, {"a": 3, "b": 4}, {"a": 5, "b": null}] |
+-----------------------------------------------------------+
如果您正在使用 MySQL 5.x,我建议您将整个 JSON 文档提取到客户端应用程序中,您可以在其中将其反序列化为数据结构以在代码中进行操作。