在Talend中使用tExtractJSONFields

时间:2019-01-30 13:08:20

标签: json talend

我正在尝试使用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"
}

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

enter image description here

我的组件配置:

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

您的方法有两个问题。
首先,tExtractJSONFields不支持传递字段(codeObjetStart,codeRetour,libelleCodeErreur,versionObjetStart)。如果它支持,则不必为每个字段都设置jsonpath表达式,因为您已经在tFileInputJSON中读取了它们。这带来了第二个问题,即jsonpath根据其documentation不支持父运算符。

您可以做的是使用可以在一行内返回文件的组件来读取文件。例如,tFileInputDelimited仅包含一列,而文件中不存在行分隔符和字段分隔符。

然后,通过设置XPath循环查询以返回resultatSdt的子代,可以将tExtractJSONFields与XPath一起使用以解析字段。

类似这样的事情: enter image description here

为方便起见,我将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                       |
'--------------+----------+--------------------------------+-----------------+--------+------------------------------+--------------------------'