从 JSON 转换数组中的列 [关闭]

Posted

技术标签:

【中文标题】从 JSON 转换数组中的列 [关闭]【英文标题】:Transform columns in Array from JSON [closed] 【发布时间】:2021-12-30 19:38:01 【问题描述】:

我有一个包含以下数据的表格。

ID DESCRIPTION COLUMN1 COLUMN2 COLUMN3
1 TESTE1 X1 X2 X3
2 TESTE2 X1 X2 X3
3 TESTE3 X1 X2 X3
4 TESTE4 X1 X2 X3
5 TESTE5 X1 X2 X3

我需要把它变成:


  "id":1,
  "description": "TESTE1",
  "columns": [
         "X1",
         "X2",
         "X3"
  ]

有人可以帮我吗?

【问题讨论】:

所有发布的只是程序描述,但这并不能告诉我们您遇到了什么问题。你尝试过什么,遇到过什么烦恼?请edit您的帖子包含valid question,我们可以回答。提醒:确保您知道on-topic 是什么;要求我们为您编写程序、建议和外部链接都是题外话。 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。 不管你用什么语言写的,你需要自己研究,并在寻求帮助之前尝试。 这能回答你的问题吗? How do you condense the values in a T-SQL pivot into a JSON? 【参考方案1】:

这是一种方法。 对字符串数组使用 string_agg & json_query。

select json
from
(
    select t.id, t.description
    , json_query(ca.column_array, '$') columns
    from your_table t
    cross apply (
        select concat('["', string_agg([col],'","'), '"]')
        from (values 
         (column1), 
         (column2), 
         (column3)) c(col)
    ) ca(column_array)
    order by t.id
    for json path
) q(json)

还有另一种方式。 对字符串数组使用 json_modify。

select json
from
(
    select id, description,
      json_modify(
        json_modify(
          json_modify('[]', 
            'append $', column1),
            'append $', column2), 
            'append $', column3) as columns
    from your_table
    order by id
    for json path
) q(json);
json
["id":1,"description":"TESTE1","columns":["X1","X2","X3"],"id":2,"description":"TESTE2","columns":["X1","X2","X3"],"id":3,"description":"TESTE3","columns":["X1","X2","X3"],"id":4,"description":"TESTE4","columns":["X1","X2","X3"],"id":5,"description":"TESTE5","columns":["X1","X2","X3"]]

dbfiddle here

上的演示

【讨论】:

感谢 LukStorms

以上是关于从 JSON 转换数组中的列 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 hql 将列表中的列转换为数组和数组到 hive 中的列表

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]

如何将多维数组转换为json对象[关闭]

将每个具有一个对象的 JSON 对象数组转换为 JSON 对象数组 [关闭]

从 URL 获取 JSON 数组并将其转换为 Android 中的 HashMap

将数组转换为 JSON 时,json_encode 返回 JSON_ERROR_UTF8 [关闭]