[英]Extract Values from key and array on JSON
如何提取 json 上的键和数组中的值
json
{
"key1": "US",
"key2": "545644566",
"car": ["HONDA","TOYOTA","FORD"]
}
结果预期:
钥匙 | 价值 |
---|---|
键1 | 我们 |
键2 | 545644566 |
车 | 本田 |
车 | 丰田 |
车 | 福特 |
我尝试使用:
SELECT JSON_EXTRACT(u.json, CONCAT('$.','"',g.field_name,'"')),g.*
FROM table_json u
LEFT JOIN table_column g
ON JSON_CONTAINS(JSON_KEYS(u.json), JSON_QUOTE(g.field_name), '$')
您可以使用诸如information_schema.tables
之类的字典表以及一些变量的迭代索引值,以便为 arrays 的元素生成行。 以下代码也适用于不需要条件的非数组元素。 应用JSON_KEYS()
function 导出第一个子查询中的关键元素,然后对各个索引使用JSON_EXTRACT()
导出最后一个子查询中 arrays 的对应值如
WITH t1 AS
(
SELECT @i := @i + 1 AS i,
JSON_UNQUOTE(JSON_EXTRACT(kys, CONCAT('$[', @i - 1, ']'))) AS `key`,
JSON_EXTRACT(json,
CONCAT('$.',
JSON_EXTRACT(kys, CONCAT('$[', @i - 1, ']'))
)
) AS value, kys
FROM t
JOIN (SELECT @i := 0, JSON_KEYS(json) AS kys FROM t) AS k
JOIN information_schema.tables
)
SELECT @k := IF(@j=`key`,@k + 1,0) AS `index`,
@j := `key` AS `key`,
JSON_UNQUOTE(JSON_EXTRACT(value, CONCAT('$[', @k, ']'))) AS value
FROM t1
JOIN (SELECT @k := 0 ) AS k
LEFT JOIN information_schema.tables
ON @k < JSON_LENGTH(value) - 1
WHERE value IS NOT NULL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.