首页 > 解决方案 > MySQL - 如何从列中列出 JSON 数据的所有键名

问题描述

我有一个 SQL 表,其中包含一个 JSON 列。现在,我想这样做。如何从注册的所有行(JSON 列)中获取所有键名。一个例子;

ID  JSON
1   {"a": 1, "b": 2}
2   {"apple": 3, "banana": 5}
3   {"wood": 4, "food": 6}

我应该得到一个查询,从这些行中获取所有键名。所以我的结果应该是这样;

JSON
--------
a
b
apple
banana
wood
food

那可能吗?我可以这样做吗?

标签: mysqlsqljson

解决方案


要回答您的问题,是的,这是可能的。

回答你的第二个问题:我怎么知道你是否可以点这个?

以下是如何执行此操作的示例:

首先我创建了示例表:

CREATE TABLE json2(id integer, js JSON);
INSERT INTO json2 VALUES
( 1,   '{"a": 1, "b": 2}'),
( 2,   '{"apple": 3, "banana": 5}'),
( 3,   '{"wood": 4, "food": 6}');

应用一些JSON 函数时:

SELECT 
   JSON_UNQUOTE(JSON_EXTRACT(JSON_KEYS(js),CONCAT('$[',x.x,']'))) as `JSON`
FROM json2
CROSS JOIN (SELECT 0 as x
             UNION ALL
             SELECT 1
             ) x
;

输出是:

+ --------- +
| JSON      |
+ --------- +
| a         |
| b         |
| apple     |
| banana    |
| food      |
| wood      |
+ --------- +

推荐阅读