Talend - 如何创建 JSON 个对象的集合

Talend - how to create a collection of JSON objects

我需要根据 REST 请求创建 JSON 个对象的集合(参见 post )。网络服务提供以下格式的机构集合:

{ "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 的输出时,所有城市的代码和名称都会立即打印出来。如果我将 tLog 更改为 tFileOutputJSON,最终文件仅包含名为 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"}
  ]
}

我在之前的项目中遇到过同样的问题。

在 Talend 中,您不能在 JSON 的末尾添加一行,但在 CSV 中可以。我使用 CSV 来包含所有行,然后将它们发送到 JSON。

在您的情况下,您的 JSON 中有多个级别,因此它会更复杂! Talend flow 只有一个级别,因此生成多个级别 JSON 已经很复杂了。

我建议看一下tJsonDoc* components。我没有自己尝试,因为我的 "CSV-workaround" 符合我的需要,但是你可以用这个工具创建复杂的结构,所以我想你可以在文件末尾添加。

我在目录中为每个 json 创建了一个文件,然后使用 tFileList 遍历每个文件,读取并发送它。