sql >> Database teknologi >  >> RDS >> Mysql

Få Json-nøgler i en MySQL for en bestemt værdi

Som jeg sagde, kan det være en udfordring at parse JSON i MySQL, da du har at gøre med tekstbaserede nøgler her.
Så du skal bruge JSON_KEYS() for at få dem i kombination med en talgenerator genereres en dynamisk JSON-sti til brug i JSON_EXTRACT()

MySQL's 8 funktion JSON_TABLE() gør det meget meget nemmere..

Forespørgsel

SELECT JSON_UNQUOTE( JSON_EXTRACT(json , CONCAT('$.', SUBSTRING_INDEX( SUBSTRING_INDEX(json_parsed, ',', number_generator.number) , ',' , -1 ), '.name'))) AS name FROM ( SELECT @row := @row + 1 AS number 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 ) row1 CROSS JOIN ( 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 number_generator CROSS JOIN ( SELECT SUBSTRING(json_keys, 2, json_keys_length - 2) AS json_parsed , json_keys , json , JSON_LENGTH(json_keys) AS json_array_length FROM ( SELECT JSON_KEYS(record.json) AS json_keys , json , LENGTH(JSON_KEYS(record.json)) AS json_keys_length 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" } }' AS json FROM DUAL ) AS record ) AS json_information ) AS json_init WHERE number_generator.number BETWEEN 0 AND json_array_length AND JSON_EXTRACT(json , CONCAT('$.', SUBSTRING_INDEX( SUBSTRING_INDEX(json_parsed, ',', number_generator.number) , ',' , -1 ), '.is_filter')) = true

Resultat

| name | | ------------------------ | | Intitule de la formation |

se demo



  1. Hvordan kan jeg sende en http-anmodning fra postgresql-funktion eller trigger

  2. Python REST API'er med kolbe, forbindelse og SQLAlchemy - Del 2

  3. SYS_EXTRACT_UTC() Funktion i Oracle

  4. Valg af en database i mysql med mellemrum i navnet