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

Posted

技术标签:

【中文标题】查询存储在 MySQL 中的多级 JSON 对象【英文标题】:Query a multi-level JSON object stored in MySQL 【发布时间】:2016-10-11 21:44:02 【问题描述】:

我在 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”的值?

非常感谢!

【问题讨论】:

【参考方案1】:

试试这个:

'$.data_sources.provider3'

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

【讨论】:

【参考方案2】:

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


    "key": 
        "value": "nested_value"
    

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

【讨论】:

以上是关于查询存储在 MySQL 中的多级 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

Mysql - 直接查询存储的Json字符串中的数据

Mysql - 直接查询存储的Json字符串中的数据

是否可以从 python 中的变量中检索 JSON 路径?

从存储在 hbase 中的 json 对象中查询多个列

[MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)

如何定义一个表来存储 MySQL 数据库中的 JSON 对象?