【问题标题】:Extract a key from list of key,values pairs in json field mysql从 json 字段 mysql 中的键、值对列表中提取键
【发布时间】:2019-02-27 15:53:43
【问题描述】:

我有以下格式的数据:

"article_body" : [
        {
            "article_desc" : "THURSDAY, Sept. 1, 2016 (HealthDay News) -- Dapagliflozin improves insulin sensitivity and increases lipid oxidation and plasma ketone concentration in patients with type 2 diabetes mellitus (T2DM), according to a study published online Aug. 25 in Diabetes Care. \n\n Giuseppe Daniele",
            "links" : [{
                    "link_name" : "Full Text (subscription or payment may be required)"}
            ]}
    ],

我要提取密钥

article_desc

来自article_body

Mysql 中的代码片段:

SELECT 

    JSON_EXTRACT(full_article_json, '$.article_body."article_desc"') AS description,
FROM
    wc_article_full_data;

我得到空数据,如何解析这些数据?

【问题讨论】:

  • 这不是 JSON_EXTRACT(full_article_json, '$.article_type') != '每月简报';失败,因为 article_type 字段不存在
  • 不,我只是为了提问而隐藏它。但无论如何,为避免混淆,我将其从问题中删除。

标签: mysql sql json


【解决方案1】:

你的key = 'article_body'是一个数组JSON,所以你需要使用索引来获取数据。

你可以试试这个。

架构 (MySQL v5.7)

CREATE TABLE wc_article_full_data(

   full_article_json JSON
);

insert into wc_article_full_data values (
'{"article_body" : [
    {
        "article_desc" : "THURSDAY, Sept. 1, 2016 (HealthDay News) -- Dapagliflozin improves insulin sensitivity and increases lipid oxidation and plasma ketone concentration in patients with type 2 diabetes mellitus (T2DM), according to a study published online Aug. 25 in Diabetes Care.  Giuseppe Daniele",
        "links" : [{
                "link_name" : "Full Text (subscription or payment may be required)"}
        ]}
]}');

查询 #1

SELECT JSON_EXTRACT(full_article_json,'$.article_body[0].article_desc') AS descriptio
FROM wc_article_full_data;

| descriptio                                                                                                                                                                                                                                                                                 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| "THURSDAY, Sept. 1, 2016 (HealthDay News) -- Dapagliflozin improves insulin sensitivity and increases lipid oxidation and plasma ketone concentration in patients with type 2 diabetes mellitus (T2DM), according to a study published online Aug. 25 in Diabetes Care.  Giuseppe Daniele" |

View on DB Fiddle

如果您想从article_desc 中获取所有值,而article_body 数组。您可以尝试在索引中使用*

SELECT JSON_EXTRACT(full_article_json,'$.article_body[*].article_desc') AS descriptio
FROM wc_article_full_data

【讨论】:

    【解决方案2】:

    使用 JSON_KEYS

    例如。

    SELECT JSON_KEYS(full_article_json) as jsonKeys;
    

    它将返回 json 数组中的所有键

    【讨论】:

    • 是的,我确实检查过,但是在某处我认为 json 数组可以被 mysql 解析。
    猜你喜欢
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2019-01-22
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 2020-05-03
    相关资源
    最近更新 更多