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

Spark SQL解析JSON时如何保留字符串值的引号

解决方案:Spark SQL解析JSON并保留字符串值的引号

首先注意你提供的JSON格式有误,键值对对象应该用{}而非[],正确格式应为:

{"name": "XXX","active": true,"locale": "EN","Channel":["1","2"]}

你当前用map<string, string>解析的问题在于:JSON解析器会自动去掉字符串值的引号(引号是JSON语法的一部分,并非值本身),同时会把布尔值、数组强制转成字符串,破坏原类型格式。要实现需求,需要区分字段类型解析,再针对性处理字符串值的引号,具体步骤如下:

  1. 创建测试视图(模拟你的数据)
CREATE TEMP VIEW temp_data AS
SELECT '{"name": "XXX","active": true,"locale": "EN","Channel":["1","2"]}' AS json_col;
  1. 解析JSON并构造带格式的键值对数组
    先按原始类型解析JSON为结构体,再手动构造键值对数组:对字符串类型字段添加引号,布尔、数组类型直接转字符串保留原格式,最后用explode展开:
SELECT explode(
    array(
        struct('name' AS key, concat('"', parsed.name, '"') AS value),
        struct('active' AS key, cast(parsed.active AS string) AS value),
        struct('locale' AS key, concat('"', parsed.locale, '"') AS value),
        struct('Channel' AS key, cast(parsed.Channel AS string) AS value)
    )
) AS kv
FROM (
    SELECT from_json(json_col, 'name string, active boolean, locale string, Channel array<string>') AS parsed
    FROM temp_data
) t;
  1. 最终结果
    展开后即可得到你期望的输出:
keyvalue
name"XXX"
activetrue
locale"EN"
Channel[1,2]

如果你的JSON结构是动态字段,可结合get_json_object和json_tuple遍历所有键后逐个处理,但静态结构用上述方法更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:40:57