首页 > 解决方案 > 使用 JOLT 解析器无法获得预期的输出

问题描述

我有以下input

[
  {
    "ownerId": "XTV7I728",
    "vehicleId": "999",
    "engines": [
      {
        "engineId": "1",
        "engineName": "Standard Engine",
        "engineHp": 300
      },
      {
        "engineId": "2",
        "engineName": "Custom Engine",
        "engineHp": 450
      }
    ]
  }
]

我需要如下expected输出:

    [{
      "ownerId": "XTV7I728",
      "vehicleId": "999",
      "engines":{
      "engineId": "1",
      "engineName": "Standard Engine",
      "engineHp": 300
}
    },
    {
      "ownerId": "XTV7I728",
      "vehicleId": "999",
"engines":{
      "engineId": "2",
      "engineName": "Custom Engine",
      "engineHp": 450
    }
}] 

我在下面尝试过,spec但它抛出了一个错误:

[{
  "ownerId": "ownerId",
  "*": {
    "vehicleId": "vehicleId",
    "engineId": "engineId",
    "engineHp": "engineHp"
  }
}]

Error

Error running the Transform.

JOLT Chainr 'operation' must implement Transform or ContextualTransform at index:0.  

请让我知道我哪里出错了。

标签: javajolt

解决方案


您必须指定操作(如果使用链规范),然后指定执行spec对象树的实际“行走”的部分。这应该有效:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "engines": {
          "*": {
            "@(2,ownerId)": "[#2].ownerId",
            "@(2,vehicleId)": "[#2].vehicleId",
            "*": "[#2].&"
          }
        }
      }
    }
  }
]

推荐阅读