【问题标题】:Using JSON_TABLE to fetch a nested JSON array使用 JSON_TABLE 获取嵌套的 JSON 数组
【发布时间】:2021-10-25 17:12:54
【问题描述】:

我有一个 Json 数组,如下所示

[{"keyId": "aded5b0107bb5a936604bcb6f", "keyNames": ["abc1, abc2"], "keyDesc": "test"}]

我正在使用 JSON_TABLE 来获取所有值,并且我编写了以下查询:

SELECT j.keyId, j.keyNames, j.keyDesc
FROM table t, JSON_TABLE(value, '$[*]' 
    COLUMNS(
      keyId TEXT PATH '$.keyId' 
      keyNames TEXT PATH '$.keyNames',
      keyDesc TEXT PATH '$.keyDesc')
    ) AS j;

我得到以下输出:

keyId                        keyNames   keyDesc
aded5b0107bb5a936604bcb6f    NULL       test

如何修改查询以获得"abc1, abc2" 的值keyNames 而不是NULL

【问题讨论】:

    标签: mysql arrays json sql-update mysql-json


    【解决方案1】:

    你需要 NEStED PATH 因为它是一个新数组

    CREATE TABLE t
        ( `value` TEXT)
    ;
        
    INSERT INTO t
        ( `value`)
    VALUES
        ('[{"keyId": "aded5b0107bb5a936604bcb6f", "keyNames": ["abc1, abc2"], "keyDesc": "test"}]')
    
    SELECT  
    j.keyId, j.keyNames,  j.keyDesc
    
    FROM t, JSON_TABLE(value, '$[*]' 
        COLUMNS(
          keyId TEXT PATH '$.keyId' 
          ,NESTED PATH '$.keyNames[*]' COLUMNS (keyNames varchar(10) PATH '$')
         , keyDesc TEXT PATH '$.keyDesc'
    )
        ) AS j;
    
    密钥ID |键名 |键描述 :------------------------ | :--------- | :------ aded5b0107bb5a936604bcb6f | abc1, abc2 |测试

    db小提琴here

    【讨论】:

    • 我仍然收到 NULL for keyNames,这可能是因为 NESTED PATH keyNames 没有任何列 keyNames。你能查一下吗?
    • 正如您在小提琴中看到的那样,我正确复制了您的 json,因此您无法获得 NULL 否则您有错误,请修改您的结果
    • 我的数据和你的小提琴完全一样,但我仍然收到NULL。这很奇怪,不确定这里缺少什么
    • varchar(10) 更改为varchar(50) 已解决此问题。但是,我在这里是两排。一个用于abc1,另一个用于abc2
    • 那么您没有相同的数据,请参阅 hokle 周围的双引号,它构成一个字符串。问题还是解决了
    猜你喜欢
    • 2021-10-25
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多