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

使用U-SQL的JsonOutputter将Avro转JSON的格式问题求助

解决U-SQL输出嵌套JSON的问题

我懂你的困扰——目前你的source字段是以字符串形式被输出的,所以才会看到带转义字符的JSON字符串,而不是你想要的嵌套JSON对象。这是因为Avro文件里的source存储的是JSON格式的字符串,U-SQL默认不会自动解析它,我们需要先把这个字符串转换成JSON对象再输出。

解决方案步骤

  1. 解析字符串为JSON对象
    使用U-SQL内置的JsonFunctions.JsonParse()方法,把source字段从字符串类型转换成JSON对象类型。如果担心有无效JSON导致查询失败,可以用JsonFunctions.TryJsonParse()(解析失败时返回null,避免整个查询报错)。

  2. 输出解析后的数据集
    用JsonOutputter输出处理后的数据集,此时source会被渲染成嵌套的JSON结构。

修改后的完整代码示例

// 第一步:解析source字段为JSON对象
@parsedData =
    SELECT
        type,
        cnn,
        // 使用JsonParse解析字符串为JSON对象;如果需要容错,替换为JsonFunctions.TryJsonParse(source)
        JsonFunctions.JsonParse(source) AS source
    FROM @source;

// 第二步:输出处理后的JSON,indent:true可以让输出更美观(可选)
OUTPUT @parsedData 
TO "C:/Users/gutthil1/Desktop/ActivityTracker/Single_JSON/schemaType.json" 
USING new JsonOutputter(indent: true);

效果说明

执行这段代码后,输出的JSON会变成你期望的格式:

[
    {
        "type": "CE",
        "cnn": "11",
        "source": {
            "vendorCd": "G",
            "brandCd": "4",
            "channelCd": "C",
            "accessTypeCd": "I"
        }
    },
    {
        "type": "CE",
        "cnn": "9",
        "source": {
            "vendorCd": "G",
            "brandCd": "4",
            "channelCd": "C",
            "accessTypeCd": "I"
        }
    }
]

额外提示

  • 确保你的U-SQL环境支持JsonFunctions(这是U-SQL的内置函数,一般默认可用)。
  • 如果source字段的JSON结构复杂,你也可以用JsonTuple来提取特定字段,但这里我们只需要完整嵌套的话,JsonParse就足够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:57:13