我需要从REST请求创建JSON对象的集合(请参阅帖子Talend - URI based on values obtained from a list)。 Web服务以以下格式提供代理商集合:
{ "COD_AGENCIA":"521800300", "NAME":"AGENCIA01"},
{ "COD_AGENCIA":"521999999", "NAME":"AGENCIA02"},
...
(20 other values)
...
来自代理机构代码的另一个网络服务以下列格式提供与该机构相关的城市:
{"COD_MUN":"5202155","NOME_MUN":"CITY01"},
{"COD_MUN":"5202502","NOME_MUN":"CITY02"},
...
我创建了一个获得代理关系的工作,通过tFlowToIterate,我通过tRest调用多个请求,改变代理商代码。我的工作是这样的:
当我打开tLog中最后一个tExtractJSONField的输出时,会打印所有城市的代码和名称。如果我更改tFileOutputJSON的tLog,则最终文件仅包含名为cities的最后一次迭代。
我需要更改以便能够在单个作业中生成以下格式的多个JSON对象:
{"COD_AGENCIA":"521800300",
"NAME":"AGENCIA01",
"CIDADES":[{"COD_MUN":"5202155","NOME_MUN":"CITY01"},
{"COD_MUN":"5202502","NOME_MUN":"CITY02"}
]
}
{"COD_AGENCIA":"521999999",
"NAME":"AGENCIA02",
"CIDADES":[{"COD_MUN":"5244887","NOME_MUN":"CITY03"},
{"COD_MUN":"5254522","NOME_MUN":"CITY04"}
]
}
答案 0 :(得分:1)
我在之前的项目中遇到了同样的麻烦。
在Talend中,您可以在JSON的末尾添加一行,但您可以使用CSV格式。我使用CSV来获取所有行,然后用JSON发送它们。
在你的情况下,你的JSON中有多个级别,所以它会更复杂! Talend流只有一个级别,因此生成多个级别JSON已经很复杂。
我建议你看看tJsonDoc* components。我没有尝试过自己的" CSV-workaround"符合我的需求,但你可以用这个工具创建复杂的结构,所以我想你可以在文件的末尾添加。
答案 1 :(得分:0)
我为目录中的每个json创建了一个文件,然后使用tFileList遍历每个文件,读取并发送了文件。