我正在尝试使用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"
}
我的工作非常简单,我只想在控制台中显示。
我的组件配置:
答案 0 :(得分:1)
您的方法有两个问题。
首先,tExtractJSONFields
不支持传递字段(codeObjetStart,codeRetour,libelleCodeErreur,versionObjetStart)。如果它支持,则不必为每个字段都设置jsonpath表达式,因为您已经在tFileInputJSON
中读取了它们。这带来了第二个问题,即jsonpath根据其documentation不支持父运算符。
您可以做的是使用可以在一行内返回文件的组件来读取文件。例如,tFileInputDelimited
仅包含一列,而文件中不存在行分隔符和字段分隔符。
然后,通过设置XPath循环查询以返回resultatSdt的子代,可以将tExtractJSONFields
与XPath一起使用以解析字段。
为方便起见,我将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 |
'--------------+----------+--------------------------------+-----------------+--------+------------------------------+--------------------------'