Extraction de champs Json

Ce sujet est résolu
Default
,

Bonjour,

Je débute dans l'utilisation des champs Json sur MySQL et je me retrouve confronté à un problème que voici:

J'ai dans une table un champs (nommé fields) de type Json formaté comme ceci:

{"Intitule":{"name":"Intitule","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"}

Ma question est: quelle requête dois-je faire pour "extraire" les noms des clés (ici représenté "Intitule" et "Fin" ), le "name" de chacune, pour celle qui ont comme valeur "is_filters=true".

Je tourne en rond depuis quelque temps sans parvenir à trouver une solution…
Par avance merci!

5 Réponse

53392
,

salut

where fields like '%is_filter=true%'

@pluche

Pierre

53392
,

Salut
Essaye cette requête sur ta table :

    select  
        @pos1 := locate('{', fields,position('{' in fields)+1) as pos1,
        @pos2 := locate('}',fields) as pos2,
        @pos3 := locate('{',fields, @pos2+1) as pos3,
        @pos4 := locate('}',fields, @pos3+1) as pos4,
        substr(fields,@pos1,@pos2) as   intitule,
        substr(fields,@pos3,@pos4) as   fin
    from test_json;

en renomant la table évidement.

tu obtiens le "intitule" et le "fin", donc, tu fais le where sur ces champs.

j'ai tester la requête chez moi, elle fonctionne ;)
pour preuve :
voir ici
Si tu es intéressé eet que tu ne comprends pas, je peux expliquer cette requête, ce qui éviterai que tu recopie bêtement :D :D
N'hésite pas à poser d'autre questions si tu ne comprends pas, je suis OK pour t'aider ;)
@pluche

Pierre

Default
,

Hum, oui... tout simplement... :D
Je partais sur des grosses requêtes en utilisant les possibilités JSon de MySQL 5.7, mais ça ne servait pas à grand chos en effet...

Bref, merci beaucoup, ça m'apprendra à chercher trop compliqué! :)

Default
,

Autant pour moi, je n'avais pas trop fait attention à la réponse apportée, mais ça ne peut pas fonctionner car j'ai plusieurs éléments dans mon tableau Json, et dans le lot j'en aurai forcément avec un is_filter=true, du coup dans tous les cas cette requête me ramènera tous mes enregistrements, pas que les éléments avec un is_filter=true.

Dans mon exemple, il doit me ramener "intitule" mais pas "Fin".
Or là, il se contentera de tout ramener.

Default
,

Salut,

Merci beaucoup pour cette nouvelle requête, après un peu de temps dessus j'ai compris oui. :)

Je vais voir tout ça dans les jours à venir mais j'ai aussi fait le test et ça fonctionne, donc la suite ne devrait plus me poser de problème.
Merci beaucoup!! :)