首页 > 解决方案 > 忽略输出 JSON 中的隐式数组创建

问题描述

所以目前如果输入是

{
  "foo": "bar",
  "tuna": "marlin"
}

规格是

[
  {
    "operation": "shift",
    "spec": {
      "foo": "baz",
      "tuna": "baz"
    }
  }
]

输出是

{
  "baz" : [ "bar", "marlin" ]
}

如何让 jolt 不创建数组,而是用数组的最后一个元素覆盖“baz”键的值?

预期产出

{
  "baz" : "marlin"
}

标签: jolt

解决方案


据我了解,您只想获取数组的最后一个元素。因此,为您的操作类型modify-overwrite-beta添加一个规范以及lastElement()函数,例如

[
  {
    "operation": "shift",
    "spec": {
      "*": "baz"
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": "=lastElement(@(1,&))"
    }
  }
]

其中不需要在班次规范中明确编写每个键,而是用星号替换它们。然后,第二个规范中的星号也表示所有键(在这种情况下,这只是baz),并且旁边的 & 号复制键的名称以表示相对值。


推荐阅读