json - 在 Talend 中使用 tExtractJSONFields
问题描述
我正在尝试使用 talend 从 Json 文件中提取字段。我可以在我的文件数组中循环,但其他字段具有空值。
{
"codeObjetStart": "KVIOPEFL",
"codeRetour": "00",
"libelleCodeErreur": "Traitement effectué sans erreur.",
"resultatSdt": [
{
"KVIOPEFL": "0",
"NMLIBFRA": "OPERATION SANS EFFET DE LEVIER",
"NMLIBANG": "OPERATION WITHOUT LEVERAGE"
},
{
"KVIOPEFL": "1",
"NMLIBFRA": "LBO",
"NMLIBANG": "LBO"
},
{
"KVIOPEFL": "2",
"NMLIBFRA": "FSA",
"NMLIBANG": "SAF"
},
{
"KVIOPEFL": "3",
"NMLIBFRA": "CEL",
"NMLIBANG": "CEL"
}
],
"versionObjetStart": "0"
}
我的工作很简单,我只想在控制台中显示。
我的组件配置:
解决方案
你的方法有两个问题。
首先,tExtractJSONFields
不支持字段透传(codeObjetStart、codeRetour、libelleCodeErreur、versionObjetStart)。如果它确实支持它,您就不必为这些字段中的每一个设置一个 jsonpath 表达式,因为您已经在tFileInputJSON
. 这给我们带来了第二个问题,即 jsonpath 不支持父运算符,根据其文档。
您可以做的是使用可以在一行中返回文件的组件读取文件。例如,tFileInputDelimited
只有一列的 a 以及文件中不存在的行分隔符和字段分隔符。
然后您可以使用tExtractJSONFields
XPath 来解析字段,方法是设置 XPath 循环查询以返回 resultatSdt 的子项。
为了方便起见,我使用tFixedFlowInput
内联内容。
结果是:
.--------------+----------+--------------------------------+-----------------+--------+------------------------------+--------------------------.
| tLogRow_3 |
|=-------------+----------+--------------------------------+-----------------+--------+------------------------------+-------------------------=|
|codeObjetStart|codeRetour|libelleCodeErreur |versionObjetStart|KVIOPEFL|NMLIBFRA |NMLIBANG |
|=-------------+----------+--------------------------------+-----------------+--------+------------------------------+-------------------------=|
|KVIOPEFL |00 |Traitement effectué sans erreur.|0 |0 |OPERATION SANS EFFET DE LEVIER|OPERATION WITHOUT LEVERAGE|
|KVIOPEFL |00 |Traitement effectué sans erreur.|0 |1 |LBO |LBO |
|KVIOPEFL |00 |Traitement effectué sans erreur.|0 |2 |FSA |SAF |
|KVIOPEFL |00 |Traitement effectué sans erreur.|0 |3 |CEL |CEL |
'--------------+----------+--------------------------------+-----------------+--------+------------------------------+--------------------------'
推荐阅读
- excel - 将天数和小时数添加到当前时间
- c++ - 为自定义内核解析 ZAP 组的控制台字体
- python - 从某些值匹配的另一个数据帧填充数据帧
- javascript - Firefox 扩展不使用 javascript 源文件
- google-apps-script - 如何使 Google App 脚本触发器在脚本执行或 API 请求上运行?
- mysql - 如何在 MySQL 中动态地将行转置为列
- kotlin - 如何使用带有查询参数和标题的 post 方法发送 api 调用这是我的代码
- webarchive - 将 warc.gz 转换为 .warc
- python - 使用 Coverage.py 和 Pytest 测试用例代码覆盖率
- django - 没有在我的 django 项目中使用 gunicorn 创建 Sock 文件