查询存储在 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 对象的主要内容,如果未能解决你的问题,请参考以下文章