Talend的JSON解析器

时间:2012-04-03 23:50:06

标签: java json talend

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

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

我认为我的选择是:

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

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

我一直在寻找这个组件,但似乎无法找到它。从我的搜索来看,似乎甚至tFileInputJSON组件都是相对较新的。

我肯定知道Java可以很容易地做到这一点。我的问题是让整个事情在Talend框架内同步。

任何人都有一些建议我应该转向下一步?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您是否尝试过创建自定义例程?您可以在Code下(在左侧的存储库窗口中)执行此操作,右键单击Routines并创建自定义例程。 这允许你编写一个Java函数,然后可以从你的工作中的某个地方调用它(tMap,tJava,等等)。 您可以读取输入文件并在每个行/元素上调用函数,或者调用您想要的任何函数。

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

它可能感觉有点hacky,但你可以使用自定义例程做很多事情。

如果您想要一路走来创建自己的组件,这可能是一个很好的开始方式:http://www.talendforge.org/forum/viewtopic.php?id=17650 当然,创建组件要花费更多时间,但如果您认为在多个项目/案例中重复使用此代码,则可能会有用。

答案 1 :(得分:0)

逐行读取文件,并为每一行构建JSON Object

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();