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

如何使用Talend与tOutputJSON组件控制JSON文件格式

Talend自定义JSON输出结构实操方案

在Talend中默认tFileOutputJSON生成的固定结构完全可以通过组件配置+简单代码调整实现自定义,数组和对象互转的具体操作如下:

基础配置调整(修改默认输出结构的前置操作)

默认生成的平铺结构/默认外层数组都可以通过组件基础配置修改:

  • 选中tFileOutputJSON组件,取消勾选 Generate JSON array 选项即可把默认的外层数组包裹改为单对象输出,反之勾选即可将多行输入记录统一封装为外层JSON数组
  • 如需嵌套结构,不要使用默认的 schema 直接映射,切换到组件的 JSON tree 标签页,手动拖拽创建嵌套的对象、数组节点,再把输入字段映射到对应节点即可生成嵌套结构

数组与对象互转的具体实现

对象转数组

将单个对象下的多个同类型字段/多行记录转换为JSON数组,有两种常用方案:

  • 用tMap预处理:在tMap输出侧新建List类型字段,把需要放入数组的字段批量加入List,示例表达式:
    java.util.Arrays.asList(row1.field1, row1.field2, row1.field3)
    之后把该List字段映射到JSON tree的数组节点即可
  • 直接在JSON tree配置:右键要设置为数组的父节点,选择 Set as array,再把所有要作为数组元素的字段拖入该节点下,组件会自动封装为数组

数组转对象

将JSON数组的元素提取转换为对象的键值对,可按以下步骤操作:

  • 先通过tExtractJSONFields组件解析原有数组,提取数组元素的key、value为独立的行字段
  • 再在tFileOutputJSON的JSON tree中创建对应的对象节点,把提取出的key-value字段映射为对象的子节点即可
  • 小数据量场景也可以直接在tMap中写代码生成目标对象,示例代码:
import net.sf.json.JSONObject;

JSONObject targetObj = new JSONObject();
// demoArray为输入的List类型数组字段
for (int i = 0; i < row1.demoArray.size(); i++) {
    // 自定义key规则,这里用下标作为后缀
    targetObj.put("item_" + i, row1.demoArray.get(i));
}
return targetObj;

把该表达式的输出字段映射到JSON tree的对象节点即可输出目标结构

极端复杂结构的处理

如果需要生成的JSON结构非常特殊,用上述配置无法实现,可以直接用tJavaRow组件手动拼接JSON字符串,最后用tFileOutputDelimited组件输出,将文件后缀设置为.json即可,这种方式自由度最高,注意手动处理引号等转义字符即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 12:36:01