Jolt Identify Transform 和复制字段给出数组而不是值

Jolt Identify Transform and copying fields gives array instead of valie

我有以下 json 输入:

{
  "incoming": {
    "data": {
      "attributes": {
        "displayName": "TestDisplayName1",
        "authors": "TestAuthors1",
        "summary": "TestSummary1"
      }
    }
  },
  "overriddenValues": {
    "data": {
      "attributes": {
        "displayName": "TestDisplayName2",
        "authors": "TestAuthors2",
        "summary": "TestSummary3"
      }
    }
  }
}

我希望得到以下输出:

{
  "data" : {
    "attributes" : {
      "displayName" : "TestDisplayName2",
      "authors" : "TestAuthors1",
      "summary" : "TestSummary1"
    }
  }
}

使用以下 Jolt 规范(身份转换):

[
  {
    "operation": "shift",
    "spec": {
      "incoming": {
        "@": ""
      },
      "overriddenValues": {
        "data": {
          "attributes": {
            "displayName": "data.attributes.displayName"
          }
        }
      }
    }
  }
]

我得到以下输出:

{
  "data" : {
    "attributes" : {
      "displayName" : [ "TestDisplayName1", "TestDisplayName2" ],
      "authors" : "TestAuthors1",
      "summary" : "TestSummary1"
    }
  }
}

想知道为什么 displayName 的输出应该是一个值的数组。

尝试了以下解决方法:

[
  {
    "operation": "shift",
    "spec": {
      "incoming": {
        "@": ""
      },
      "overriddenValues": {
        "data": {
          "attributes": {
            "displayName": "data.attributes.displayName"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "data": {
        "attributes": {
          "*": "data.attributes.&",
          "displayName": {
            "1": "data.attributes.displayName"
          }
        }
      }
    }
  }
]

但它有明显的缺陷,如果 displayName 字段在 incoming.data.attributes 中不存在,displayName 将丢失在输出中。

任何线索都会有所帮助。谢谢。

我想我想出了一个实现转型的方法。该规范给出了预期的输出:

[
  {
    "operation": "shift",
    "spec": {
      "incoming": {
        "data": {
          "attributes": {
            "displayName": null,
            "*": "data.attributes.&"
          }
        }
      },
      "overriddenValues": {
        "data": {
          "attributes": {
            "displayName": "data.attributes.displayName"
          }
        }
      }
    }
  }
]