Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
371 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Extraction de champs Json

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] Extraction de champs Json

n°2337541
Furaxx
Posté le 02-08-2019 à 15:23:01  profilanswer
 

Bonjour,
 
J'ai dans une table un champs de type Json formaté comme ceci:
 

Code :
  1. {"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! :)

mood
Publicité
Posté le 02-08-2019 à 15:23:01  profilanswer
 

n°2337543
mechkurt
Posté le 02-08-2019 à 15:40:34  profilanswer
 

Pas évident, le JSON n'étant pas un format ou l'ordre des clef/valeur est prédictible, tu ne peux même pas faire un LIKE ('%Intitule%"is_filter":true%') sur une colonne en FULLTEXT, ni même une REGEX (qui serait de toute façon catastrophique en terme de perf)...
 
Regardes du coté de https://dev.mysql.com/doc/refman/5. [...] on-extract si tu peux trouver ton bonheur.


---------------
D3
n°2337628
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-08-2019 à 14:33:52  profilanswer
 

Après, est-ce une bonne idée de stocker du json en base si on veut en extraire des données ? Pourquoi ne pas avoir créé une table dédiée avec les colonnes "name", "stats", "is_array", ... et éventuellement une colonne "cle" prenant la valeur "Intitule" et "Fin" et ne pas l'avoir remplie avec les données de ce JSON ?

Message cité 1 fois
Message édité par Harkonnen le 06-08-2019 à 14:36:03

---------------
J'ai un string dans l'array (Paris Hilton)
n°2337630
Erlum
Posté le 06-08-2019 à 15:34:56  profilanswer
 

Harkonnen a écrit :

Après, est-ce une bonne idée de stocker du json en base si on veut en extraire des données ? Pourquoi ne pas avoir créé une table dédiée avec les colonnes "name", "stats", "is_array", ... et éventuellement une colonne "cle" prenant la valeur "Intitule" et "Fin" et ne pas l'avoir remplie avec les données de ce JSON ?


 
Ça peut être utile quand t'es face à des données dont la forme n'est pas forcément prévisible, ou que ces données augmenteraient significativement la complexité de ta base en utilisant l'approche traditionnelle.
 
Y'a pas mal de cas d'utilisations pour ça.

n°2337631
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 06-08-2019 à 15:42:06  profilanswer
 

:jap:
 
Reste à savoir si c'est le cas pour Furaxx


---------------
J'ai un string dans l'array (Paris Hilton)
n°2337979
pierrot_77
Posté le 17-08-2019 à 08:46:24  profilanswer
 

à coeur vaillant, rien d'impossible  ;)  
 
stoker du json n'est certes pas très ingénieux, mais c'est fait :D
 

Code :
  1. select
  2.         @pos1 := locate('{', fields,position('{' in fields)+1) as pos1,
  3.         @pos2 := locate('}',fields) as pos2,
  4.         @pos3 := locate('{',fields, @pos2+1) as pos3,
  5.         @pos4 := locate('}',fields, @pos3+1) as pos4,
  6.         substr(fields,@pos1,@pos2) as   intitule,
  7.         substr(fields,@pos3,@pos4) as   fin
  8. from planningbe.test_json
  9. having intitule like '%"stats":true%';


 
Voilà comment extraire de "intituler" tous les "stats":true ;)
 
la table comprend près de 200 000 enreg, pour en extraire les plus 32 000 il faut 1.4 sec, question perfs, c'est pas si dramatique ce ça :D :D
 
 
@pluche
 
Pierre


Message édité par pierrot_77 le 17-08-2019 à 08:48:44

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Extraction de champs Json

 

Sujets relatifs
[MySQL] Champs Json, ordre non gardé[MySQL] - Sélection d'un relevé du mois précédent
[résolu] Tester si un evariable est bien une connexion Mysql ?[MySQL] - Sélectionner enregistrements qui ne sont pas ailleurs
[MySQL] Nombre de cours et exercices avec une seules requête[MySQL] temps fetching trop important
Python 3.6 extraction de feuille excel pour convertion en PDF[JAVASCRIPT] JSON.parse()
Plus de sujets relatifs à : [MySQL] Extraction de champs Json


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR