我正在测试talend在项目中的潜在用途 - 基本任务很容易完成,但是我正在努力应对以下情况:
我们有多个平面文件,所有这些文件结合起来描述各种项目。对于我的测试,我只想将其中两个文件(现在)合并为JSON格式。这里的问题是其中一个文件每个项目包含1行或更多行;
例如:
文件1:id,类别
1, A
2, A
3, B
文件2:id,语言,颜色
1, en_GB, Red
1, de_DE, Rot
2, en_GB, Blue
3, en_GB, Green
3, de_DE, Grün
3, es_ES, Verde
结果应如下所示:
{
items[{
"id": 1,
"category": "A",
"colours": [{
"language": "en_GB",
"colour": "Red"
}, {
"language": "de_DE",
"colour": "Rot"
}],
},
...
}
到目前为止我尝试的是:
tMap将文件/行合并在一起,然后通过id进行分组。这不太有用,因为它会将语言和颜色属性单独格式化为逗号分隔列表:
即
"language": "en_GB, de_DE",
"colour": "Red, Rot"
这不是我们要求的。
是否有可能实现我们在talend中所需要的东西?如果是这样,怎么样?
答案 0 :(得分:0)
这是我使用java json库放在一起的解决方案,因为json组件不处理这种复杂的结构。
tAggregateRow设置:
首先,使用tLibraryLoad加载json-java.jar。然后使用tMap连接数据(在id列上,返回所有匹配项),然后使用id聚合它,并输出语言和颜色的对象列表。然后在tJavaFlex中,遍历行以构造最终的json(这里是java code)。
根据您的示例提供以下格式化输出:
{
items: [{
"id": 1,
"category": "A",
"colours": [{
"colour": "Red",
"language": "en_GB"
}, {
"colour": "Rot",
"language": "de_DE"
}
]
}, {
"id": 2,
"category": "A",
"colours": [{
"colour": "Blue",
"language": "en_GB"
}
]
}, {
"id": 3,
"category": "B",
"colours": [{
"colour": "Green",
"language": "en_GB"
}, {
"colour": "Grün",
"language": "de_DE"
}, {
"colour": "Verde",
"language": "es_ES"
}
]
}
]
}