查询存储在MySQL中的多级JSON对象

时间:2016-06-10 20:11:13

标签: python mysql sql json

我在MySQL表中有一个包含多级JSON对象的JSON列。我可以使用函数JSON_EXTRACT访问第一级的值,但我找不到如何超越第一级。

这是我的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 个答案:

答案 0 :(得分:2)

试试这个:

'$.data_sources.provider3'

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

答案 1 :(得分:0)

MySql中的JSON_EXTRACT方法支持,' $'引用JSON根,而句点引用嵌套级别。在这个JSON示例中

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

您可以使用JSON_EXTRACT(json_field,' $ .key.value')来获取" nested_value"