2016-06-10 21 views
0

我在包含多級JSON對象的MySQL表中有一個JSON列。我可以使用函數JSON_EXTRACT訪問第一級的值,但我無法找到如何超過第一級。查詢存儲在MySQL中的多級JSON對象

這裏是我的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'; 

如何在'data_sources'中請求'provider3'的值?

非常感謝!

回答

2

試試這個:

'$.data_sources.provider3' 

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

在MySQL中JSON_EXTRACT方法支持的是, '$' 引用JSON根,而期間將基準嵌套的水平。在此JSON例子

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

你可以使用JSON_EXTRACT(json_field, '$ .key.value')來獲得 「nested_value」