Както казах, анализирането на JSON в MySQL може да бъде предизвикателство, тъй като тук работите с текстови ключове.
Така че ще трябва да използвате JSON_KEYS()
за да ги получите в комбинация с генератор на числа, се генерира динамичен JSON път, който да се използва в JSON_EXTRACT()
8 функция на MySQL JSON_TABLE()
го прави много по-лесно..
Запитване
SELECT JSON_UNQUOTE( JSON_EXTRACT(json , CONCAT('$.', SUBSTRING_INDEX( SUBSTRING_INDEX(json_parsed, ',', number_generator.number) , ',' , -1 ), '.name'))) КАТО имеFROM ( SELECT @row :=@row + 1 КАТО номер FROM ( SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) ред 1 КРЪСТО ПРИСЪЕДИНЕНИЕ ( SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) row2 CROSS JOIN ( SELECT @row :=0 ) init_user_params ) AS STRING SUB number_generator (SELECT STRING JOIN_generator json_keys, 2, json_keys_length - 2) КАТО json_parsed , json_keys , json , JSON_LENGTH(json_keys) КАТО json_array_length FROM ( SELECT JSON_KEYS(record.json) КАТО json_keys(record.json) КАТО json_keys(record.json) AS json_keys(record.json) AS json_keys,json_keys, json_keys. h FROM ( SELECT '{ "Intitule":{ "name":"Intitule de la formation", "stats":false, "is_array":false, "is_filter":true, "chart":"pie", "col ":"6" }, "Fin":{ "name":"Date de fin", "stats":false, "is_array":false, "is_filter":false, "chart":"pie", "col ":"6" } }' КАТО json ОТ DUAL ) КАТО запис ) КАТО json_information ) КАТО json_initWHERE number_generator.number МЕЖДУ 0 И json_array_length И JSON_EXTRACT(json , CONCAT('$.', SUB'son_STRING_INDEX, SUB'son_STRING_INDEX, SUB'son_array_length). number_generator.number) , ',' , -1 ), '.is_filter')) =вярно
Резултат
<предварителен код>| име || ------------------------ || Intitule de la formation |вижте демо