You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中如何将键值对JSON数组转换为单个JSON对象?

问题:Snowflake SQL中将JSON数组转换为单个合并JSON对象

我有如下JSON数组:

[
    {"key": "cId", "value": "d03ce656"},
    {"key": "cName", "value": "Healthcare"},
    {"key": "pId", "value": "d869628b"},
    {"key": "pName", "value": "ConveYour"}
]

希望转换为单个JSON对象:

{
  "cId": "d03ce656",
  "cName": "Healthcare",
  "pId" : "d869628b",
  "pName": "ConveYour"
}

我尝试了以下SQL语句:

SELECT
    OBJECT_CONSTRUCT(
        parse_json(f.value):key::string, 
        parse_json(f.value):value::string
    ) AS json_object
FROM LATERAL FLATTEN(INPUT => PARSE_JSON('[
    {"key": "cId", "value": "d03ce656"},
    {"key": "cName", "value": "Healthcare"},
    {"key": "pId", "value": "d869628b"},
    {"key": "pName", "value": "ConveYour"}
]')) AS f;

但执行后返回4行独立的JSON对象:

JSON_OBJECT
{    "cId": "d03ce656"  }
{    "cName": "Healthcare"  }
{    "pId": "d869628b"  }
{    "pName": "ConveYour"  }

需要的是单个合并后的JSON对象,请问该如何解决?


解决方案

使用OBJECT_AGG函数聚合拆分后的键值对即可,它能将多行的键值组合并为单个JSON对象。

修改后的SQL如下:

SELECT
    OBJECT_AGG(
        parse_json(f.value):key::string, 
        parse_json(f.value):value::string
    ) AS merged_json_object
FROM LATERAL FLATTEN(INPUT => PARSE_JSON('[
    {"key": "cId", "value": "d03ce656"},
    {"key": "cName", "value": "Healthcare"},
    {"key": "pId", "value": "d869628b"},
    {"key": "pName", "value": "ConveYour"}
]')) AS f;

关键说明:

  • FLATTEN仍负责将JSON数组拆分为单个键值对行;
  • OBJECT_AGG会把所有行的键(key字段值)和对应值(value字段值)聚合,生成完整的合并JSON对象;
  • 执行后将返回一行结果,即目标格式的单个JSON对象。

内容的提问来源于stack exchange,提问作者Avenger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:30:10