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

Come recuperare i dati JSON da MySQL?

Dal momento che molte persone mi hanno posto questa domanda personalmente, ho pensato di dare a questa risposta una seconda revisione. Ecco un gist che ha l'SQL completo con SELECT, Migration e View Creation e un violino sql live (disponibilità non garantita per violino) .

Supponiamo che tu abbia una tabella (denominata:TBL_JSON) come questa:

 ID   CITY        POPULATION_JSON_DATA
-----------------------------------------------------------------------
 1    LONDON      {"male" : 2000, "female" : 3000, "other" : 600}
 2    NEW YORK    {"male" : 4000, "female" : 5000, "other" : 500}

Per selezionare ogni campo json, puoi fare:

SELECT 
    ID, CITY,
    json_extract(POPULATION_JSON_DATA, '$.male') AS POPL_MALE,
    json_extract(POPULATION_JSON_DATA, '$.female') AS POPL_FEMALE,
    json_extract(POPULATION_JSON_DATA, '$.other') AS POPL_OTHER
FROM TBL_JSON;

che risulta:

ID  CITY      POPL_MALE  POPL_FEMALE   POPL_OTHER 
-----------------------------------------------------------------
1   LONDON    2000       3000          600
2   NEW YORK  4000       5000          500

Questa potrebbe essere un'operazione costosa da eseguire in base alla dimensione dei dati e alla complessità json. Suggerisco di usarlo per

  1. Migrazione della tabella per dividere il database (Vedi Appendice 2-B nel gist)
  2. Almeno crea una vista (vedi Appendice 2-C nel succo)

Attenzione:potresti avere json che inizia con virgolette doppie (stringato):

"{"male" : 2000, "female" : 3000, "other" : 600}"

Testato con Mysql 5.7 su Ubuntu e Mac OSX Sierra.