2016-06-10 6 views
0

У меня есть столбец JSON в таблице MySQL, содержащий многоуровневый объект JSON. Я могу получить доступ к значениям на первом уровне с помощью функции JSON_EXTRACT, но я не могу найти, как перейти на первый уровень.Запросить многоуровневый объект JSON, хранящийся в MySQL

Вот мой MySQL таблицы:

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

Вот мой Python скрипт:

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() 

данные правильно вставлена ​​в таблицу MySQL и следующее заявление в MySQL работает:

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

Как я могу запросить значение 'provider3' в 'data_sources'?

Большое спасибо!

ответ

2

Попробуйте это:

'$.data_sources.provider3' 

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

метод JSON_EXTRACT в MySql поддерживает, что ссылки знака '$' корневые JSON, в то время как периоды ссылки на уровни вложенности. В этом примере JSON

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

можно использовать JSON_EXTRACT (json_field, '$ .key.value'), чтобы получить "nested_value"

Смежные вопросы