我正在使用Pentaho Data集成工具来完成一些ETL处理工作。
我的数据输入是一个名为data.json的json文件,它有许多json对象,如下所示:
{"id":"333","name":"iit"}
{"id":"444","name":"nit"}
{"id":"555","name":"iiit"}
{"id":"666","name":"jnit"}
当我在PDI转换设计中使用json输入时,json预览仅显示第一行。请查看此截图
但是当我修改我的data.json文件时,同样的工作正常,如下所示:
{
"data" : [
{"id":"333","name":"iit"},
{"id":"444","name":"nit"},
{"id":"555","name":"iiit"},
{"id":"666","name":"jnit"}
]
}
请帮助我如何使用以下格式获取data.json文件中存在的所有json对象:
{"id":"333","name":"iit"}
{"id":"444","name":"nit"}
{"id":"555","name":"iiit"}
{"id":"666","name":"jnit"}
你的$ .id和$ .name的路径很好。问题出在JSON上。
{"id":"333","name":"iit"}
{"id":"444","name":"nit"}
{"id":"555","name":"iiit"}
{"id":"666","name":"jnit"}
这不是有效的JSON,这就是为什么只有第一行被读入。它读取第一行,然后它遇到第二个打开的花括号,没有点击逗号,它只是停止,因为它不知道如何处理无效JSON。
像这样格式化你的JSON,它应该可以在不修改你的JSONPath的情况下工作。
{"id":"333","name":"iit"},
{"id":"444","name":"nit"},
{"id":"555","name":"iiit"},
{"id":"666","name":"jnit"}
XPath的:
$。数据[*]。ID
不同于:
$。数据
尝试使用$ .. id和$ .. name,应该适用于这两种情况并为您带来所有对象。
如果你的JSON文件看起来像这样,可以做一个解决方法:
创建一个文本文件输入,它读取每一行并将行发送到JSON输入。
然后,每一行都将被视为自己的JSON输入。
Text-file-input and JSON-input
然后,您可以按照预期使用JSON节点(如果我理解正确的话)
您的输出将如下所示:
使用“选择值”节点删除json列。