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

如何在ClickHouse中将JSON数组转换为元组数组

如何在ClickHouse中将JSON数组转换为元组数组

嘿,我来帮你搞定这个转换需求!在ClickHouse里,我们可以结合JSONExtractArray和arrayMap这两个函数,轻松把你给定的JSON数组转换成Array(Tuple(String, Int64))类型的结果。

直接测试示例

先给你一个可以直接运行的测试语句,用WITH子句模拟你的JSON数据:

WITH '{"foo": [{"a": "bar", "b": 10, "c": 100}, {"a": "baz", "b": 20, "c": 200}]}' AS json_data
SELECT
    arrayMap(
        x -> (JSONExtractString(x, 'a'), JSONExtractInt(x, 'b')),
        JSONExtractArray(json_data, 'foo')
    ) AS tuple_array

运行这个语句后,你会得到这样的结果:

[('bar',10),('baz',20)]

从数据表中查询的写法

如果你的JSON数据存储在某个表的字段里(比如字段名为json_column),可以用下面的语句:

SELECT
    arrayMap(
        x -> (JSONExtractString(x, 'a'), toInt64(JSONExtractUInt(x, 'b'))),
        JSONExtractArray(json_column, 'foo')
    ) AS tuple_array
FROM your_table

关键细节说明

  • JSONExtractArray(json_data, 'foo'):负责从JSON字符串中提取foo对应的数组,每个数组元素是独立的JSON对象字符串。
  • arrayMap(...):遍历提取出的数组,对每个JSON对象x,分别提取a的字符串值和b的数值,组成元组。
  • 如果你需要确保b是严格的Int64类型,可以用toInt64()做强制转换,比如上面例子里的toInt64(JSONExtractUInt(x, 'b')),避免因原始JSON中数值类型不符导致的问题。

备注:内容来源于stack exchange,提问作者Russiancold

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:23:00