MySQL JSON与任意键到表



有一个映射嵌套在一个大的json有效负载,如

{
"map": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
},
// more stuff
}

我想生成一个这样的表:

+------#--------+
| Key  | Value  |
+------#--------+
| key1 | value1 |
| key2 | value2 |
| key3 | value3 |
+------#--------+

我唯一能想到的是编写一个存储函数,循环JSON_KEYS将所有键值对转换为

[{"key":"key1", "value":"value1"}, {"key":"key2", "value":"value2"}, ...]

使JSON_TABLE的任务变得微不足道。

有没有更快更优雅的方法?

解决方案:

select j.key, json_unquote(json_extract(m.data, concat('$.map.', j.key))) as value from mytable as m
cross join json_table(json_keys(m.data, '$.map'), '$[*]' columns (`key` varchar(10) path '$')) as j

带有示例数据的输出:

+------+--------+
| key  | value  |
+------+--------+
| key1 | value1 |
| key2 | value2 |
| key3 | value3 |
+------+--------+

如果那个查询看起来不优雅或难以维护,那么你可能是对的。如果你想要简单或优雅的查询,你不应该将数据存储在JSON中。

你做得很好,甚至为企业项目这样做

最新更新