数组输入的Jolt转换JSON规范

问题描述

我正在尝试使用以下规范进行JOLT移位操作,但该规范不起作用。不知道我犯了什么错误在这种情况下需要帮助。输出JSON作为对象而不是数组出现,并且shift也无法按预期工作。

    Input : [
      {
        "Header": {
          "Number": 1,"Id": "JO"
        },"Name": "John"
      },{
        "Header": {
          "Number": 2,"Id": "JS"
        },"Name": "Justin"
      }
    ]
    Spec : [
      {
        "operation": "shift","spec": {
          "*": {
            "Header": "Header","Name": "Header.Name"
          }
        }
      }
    ]
    Expected Output : [
      {
        "Header": {
          "Number": 1,"Id": "JO","Name": "John"
        }    
      },"Id": "JS","Name": "Justin"
        }    
      }
    ]
    Actual Output : {
      "Header" : [ {
        "Number" : 1,"Id" : "JO","Name" : "John"
      },{
        "Number" : 2,"Id" : "JS"
      } ]
    }

解决方法

还必须指定"Header"对象为inside the array

此外,是您为数组的每个元素放置"Header"对象的数组的索引。

这就是下面的规范(将[&1]-apmersand wildcard与数组结合使用):

[
  {
    "operation": "shift","spec": {
      "*": {
        "Header": "[&1].Header","Name": "[&1].Header.Name"
      }
    }
  }
]

来源:

  1. Shiftr.java javadocs
  2. 其他答案:"How do I transform an array using Jolt?"
  3. Demo application中链接的
  4. the jolt repo用于测试规范