2

我需要一些帮助来设计一种在 Talend 作业(Java 作业,而不是 Perl)中解析 JSON 文档的策略。我正在使用 Talend 版本:5.0.2 并在 Mac 上开发,计划在 Linux 机器上运行。

不幸的是,由于我的文件格式,我无法使用 tFileInputJSON 组件——每个文件包含数百个 JSON 文档,一个完整的 JSON 文档占据文件中的一行。我认为正确的解决方案是逐行读取文件,然后将其传递到 JSON 解析器,然后从那里将结果发送到工作的其余部分。

在我看来,我的选择是:

a) 将行输入发送到某种 Java JSON 解析器。如果这是我需要采取的策略,我想要一些关于如何处理输出和获取的建议

b) 找到解析 JSON 文档的 Talend 组件,但在流中,而不是在有效 JSON 格式的单个文件中。

我四处寻找这个组件,但似乎找不到它。从我的搜索来看,tFileInputJSON 组件似乎也相对较新。

我绝对知道这是 Java 可以轻松完成的事情。我的问题是让整个事情在 Talend 框架内同步。

有人对我下一步应该转向哪里有一些建议吗?

提前致谢。

4

2 回答 2

1

您是否尝试过创建自定义例程?您可以在代码下(在左侧的存储库窗口中)执行此操作,右键单击例程并创建您的自定义例程。这使您可以编写一个 Java 函数,然后可以从您工作中的某个位置(tMap、tJava 等)调用该函数。您可以读取您的输入文件并在每一行/元素上调用一个函数,或者任何您想做的事情。

与任何 Java 函数一样,该例程随后可以写入文件、打印到屏幕或返回一些列表对象,您可以在另一个 tJava、tJavaFlex、tJavaRow 或您工作中的任何 Talend 组件中进一步处理这些对象。

它可能会让人觉得有点 hacky,但您可以使用自定义例程做很多事情。

如果你想一路走下去,创建自己的组件,这可能是一个不错的入手方式:http ://www.talendforge.org/forum/viewtopic.php?id= 17650 当然,创建组件远不止于此耗时,但如果您认为您将在多个项目/案例中重用此代码,则可能会很有用。

于 2012-04-09T00:10:19.680 回答
0

逐行读取文件,并为每一行构造一个JSON 对象

final BufferedReader br = new BufferedReader(new FileReader(file));
String line;

while ((line = br.readLine()) != null)         // read until EOF
{
  final JSONObject json = new JSONObject(line);
  ...
}

br.close();
于 2012-04-04T00:13:12.090 回答