我需要一些帮助来设计一个策略来解析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框架内同步。
任何人都有一些建议我应该转向下一步?
提前致谢。
答案 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();