简体   繁体   English

MySQL - 如何从列中列出 JSON 数据的所有键名

[英]MySQL - How can I list all key names of a JSON data from column

I have a SQL table and that contains a JSON column.我有一个 SQL 表,其中包含一个 JSON 列。 Now, I want to do that.现在,我想这样做。 How get the all key names from registered all rows (JSON column).如何从注册的所有行(JSON 列)中获取所有键名。 An example;一个例子;

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

I should have got a query that get all key names from this rows.我应该得到一个查询,从这些行中获取所有键名。 So my result should be that;所以我的结果应该是这样;

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

Is that possible?那可能吗? Can I do this?我可以这样做吗?

To answer your question, YES it is possible.要回答您的问题,是的,这是可能的。

To answer your second question: How would I know if you can dot this?回答你的第二个问题:我怎么知道你是否可以点这个?

Below is an example of how to do it:以下是如何执行此操作的示例:

First i created the sample table:首先我创建了示例表:

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}');

When applying some JSON functions :应用一些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
;

The output is: output 是:

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

You can use a recursive cte:您可以使用递归 cte:

with recursive cte(i, val, r) as (
   select id, substr(js, instr(js, '"')+1, instr(js, ':') - instr(js, '"')-2), substr(js, instr(js, ':')+1, instr(js, '}') - instr(js, ':')) from json
   union all
   select i, substr(r, instr(r, '"')+1, instr(r, ':') - instr(r, '"')-2), substr(r, instr(r, ':')+1, instr(r, '}') - instr(r, ':')) from cte where r like '%"%'
)
select val `JSON` from cte order by i;

Output: Output:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何从包含存储在 MySQL 数据库 7.4 的 TEXT 列中的 JSON 对象列表的 JSON 数组中检索特定的 JSON 值 - How can I retrieve a specific JSON value from a JSON array containing a list of JSON objects stored in a TEXT column in a MySQL Database 7.4 如何在 MySQL 中找到包含特定列名的所有表? - How can I find all the tables in MySQL with specific column names in them? How can I access JSON column in mysql db from golang - How can I access JSON column in mysql db from golang 如何更新MySQL JSON列中的特定值 - How can I update specific value from MySQL JSON column 如何将值与 MySQL 中的列中的所有值聚合 - how can I aggregation values with all the values from a column in MySQL 如何在MySQL中将列值用作列名 - How can I use column values as column names in MySQL 如何从 JSON 列中获取所有不同的属性名称? - How do I get all distinct property names from a JSON column? 如何选择mysql中的列名,列数据类型,表的键列 - How select column names ,column data type, key column of a table in mysql 如何从 SQL Server 中特定数据库的表中获取所有列名? - How can I get all column names from a table from a specific database in SQL Server? 如何从数据库中获取所有表的列表以及列名 - How to get a list of all tables from the database together with column names
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM