我正在尝试使用 Snowflake 中的 SQL 将原始 json 转换为以下所需的结果。我怎样才能做到这一点?
我试过 parse_json(newFutureAllocations[0]:fundId) 但这只会带回第一个 fundId 元素。
原件 “新未来分配”:[ { “基金编号”:1, “百分比分配”:2500 }, { "fundId": 5, “百分比分配”:7500 } ]
希望 “新未来分配”:{ “1”:2500, “5”:7500 }
答案 0 :(得分:0)
您需要使用 flatten
将数组元素转换为行,然后使用 object_agg()
将它们再次聚合,作为对象而不是数组。确切的语法取决于您的查询、数据等的其余部分,而您没有提供足够的详细信息。
答案 1 :(得分:0)
这里的挑战是重新构造对象,我使用了字符串连接:
with data as (
select parse_json(
'[ { "fundId": 1, "percentAllocation": 2500 }
, { "fundId": 5, "percentAllocation": 7500 } ]') j
)
select parse_json('{'||
listagg('"'||x.value:fundId ||'"'||':'|| x.value:percentAllocation, ',')
||'}')
from data, table(flatten(j)) x
group by seq