【问题标题】:Create json table from nested json object从嵌套的 json 对象创建 json 表
【发布时间】:2021-10-02 03:25:46
【问题描述】:

我在表mytable 的字段json_s 中有一个json 结构,如下(这是一行的示例,会有很多类似的行)

{
 "100": {
         "1": [[2,3],2] ,
         "4": [[10], 0]
        },
 "102": {
         "7":[[5,6],5]
        }
}

我想将其转换为json_table 以便在不同的查询中进一步使用。 json表结构应该是这样的

field_a  |  field_b  | field_c  | 
 100     |    1      |   2      | 
 100     |    1      |   3      |
 100     |    4      |   10     |     
 102     |    7      |   5      | 
 102     |    7      |   6      | 

我已经尝试了许多其他问题的解决方案,例如this,但到目前为止还没有成功。 一个主要问题是我想在 json 列中分配未知键,并且结构嵌套在两个级别。

编辑: 结构到字段映射将是这样的

{ "field_a" : {
               "field_b" : [ ["field_c1", "field_c2",... ] , x]
               }}

意思是忽略x元素

【问题讨论】:

  • 为什么最终结果中会跳过一些源值?
  • 我只想要数组第一个元素的输出(它本身就是一个数组)

标签: mysql sql json


【解决方案1】:
SELECT jt1.field_a, 
       jt2.field_b,
       jt3.field_c
FROM t1
CROSS JOIN JSON_TABLE(JSON_KEYS(t1.data),
                      '$[*]' COLUMNS (field_a VARCHAR(255) PATH '$')) jt1
CROSS JOIN JSON_TABLE(JSON_KEYS(JSON_EXTRACT(t1.data, CONCAT('$."', jt1.field_a, '"'))),
                      '$[*]' COLUMNS (field_b VARCHAR(255) PATH '$')) jt2
CROSS JOIN JSON_TABLE(JSON_EXTRACT(t1.data, CONCAT('$."', jt1.field_a, '"."', jt2.field_b, '"')),
                      '$[0][*]' COLUMNS (field_c VARCHAR(255) PATH '$')) jt3

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=479b21bf8f8d46ede2a0e262618df62e

【讨论】:

  • 不使用json_table也可以获取表格吗?
  • @mayankagrawal 递归 CTE 和字符串和/或 JSON 函数当然可以解决...
猜你喜欢
  • 1970-01-01
  • 2018-12-29
  • 2017-02-14
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多