使用U-SQL的JsonOutputter将Avro转JSON的格式问题求助
解决U-SQL输出嵌套JSON的问题
我懂你的困扰——目前你的source字段是以字符串形式被输出的,所以才会看到带转义字符的JSON字符串,而不是你想要的嵌套JSON对象。这是因为Avro文件里的source存储的是JSON格式的字符串,U-SQL默认不会自动解析它,我们需要先把这个字符串转换成JSON对象再输出。
解决方案步骤
解析字符串为JSON对象
使用U-SQL内置的JsonFunctions.JsonParse()方法,把source字段从字符串类型转换成JSON对象类型。如果担心有无效JSON导致查询失败,可以用JsonFunctions.TryJsonParse()(解析失败时返回null,避免整个查询报错)。输出解析后的数据集
用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
相关产品推荐
相关产品推荐

