首页 > 解决方案 > 在 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"
}

我的工作很简单,我只想在控制台中显示。

在此处输入图像描述

我的组件配置:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

标签: jsontalend

解决方案


你的方法有两个问题。
首先,tExtractJSONFields不支持字段透传(codeObjetStart、codeRetour、libelleCodeErreur、versionObjetStart)。如果它确实支持它,您就不必为这些字段中的每一个设置一个 jsonpath 表达式,因为您已经在tFileInputJSON. 这给我们带来了第二个问题,即 jsonpath 不支持父运算符,根据其文档

您可以做的是使用可以在一行中返回文件的组件读取文件。例如,tFileInputDelimited只有一列的 a 以及文件中不存在的行分隔符和字段分隔符。

然后您可以使用tExtractJSONFieldsXPath 来解析字段,方法是设置 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                       |
'--------------+----------+--------------------------------+-----------------+--------+------------------------------+--------------------------'

推荐阅读