【问题标题】:Query a multi-level JSON object stored in MySQL查询存储在 MySQL 中的多级 JSON 对象
【发布时间】: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”的值?

非常感谢!

【问题讨论】:

    标签: python mysql sql json


    【解决方案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”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-06
        • 1970-01-01
        • 2021-11-08
        • 2013-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多