2016-06-10 9 views
0

Ich habe eine JSON-Spalte in einer MySQL-Tabelle, die ein mehrstufiges JSON-Objekt enthält. Ich kann auf die Werte auf der ersten Ebene mit der Funktion JSON_EXTRACT zugreifen, aber ich kann nicht finden, wie man über die erste Ebene geht.Abfrage eines mehrstufigen JSON-Objekts, das in MySQL gespeichert ist

Hier ist meine MySQL-Tabelle:

CREATE TABLE ref_data_table (
    `id` INTEGER(11) AUTO_INCREMENT NOT NULL, 
    `symbol` VARCHAR(12) NOT NULL, 
    `metadata` JSON NOT NULL, 
    PRIMARY KEY (`id`) 
); 

Hier ist mein Python-Skript:

import json 
import mysql.connector 

con = mysql.connector.connect(**config) 
cur = con.cursor() 

symbol = 'VXX' 
metadata = { 
    'tick_size': 0.01, 
    'data_sources': { 
     'provider1': 'p1', 
     'provider2': 'p2', 
     'provider3': 'p3' 
    }, 
    'currency': 'USD' 
} 
sql = \ 
    """ 
    INSERT INTO ref_data_table (symbol, metadata) 
    VALUES ('%s', %s); 
    """ 
cur.execute(sql, (symbol, json.dumps(metadata))) 
con.commit() 

Die Daten werden korrekt in die MySQL-Tabelle eingefügt und die folgende Anweisung in MySQL funktioniert:

SELECT symbol, JSON_EXTRACT(metadata, '$.data_sources') 
FROM ref_data_table 
WHERE symbol = 'VXX'; 

Wie kann ich den Wert von 'provider3' in 'data_sources' anfordern?

Vielen Dank!

Antwort

2

Diese Versuchen:

'$.data_sources.provider3' 

SELECT symbol, JSON_EXTRACT(metadata, '$.data_sources.provider3) 
FROM ref_data_table 
WHERE symbol = 'VXX'; 
0

die JSON_EXTRACT Verfahren in MySql unterstützt, dass die Wurzel '$' verweist auf die JSON, während Perioden Verschachtelungsebenen referenzieren. in diesem JSON Beispiel

{ 
    "key": { 
     "value": "nested_value" 
    } 
} 

könnten Sie JSON_EXTRACT (json_field, '$ .key.value') verwenden, um "nested_value"

Verwandte Themen