Jolt Identify Transform и копирование полей дает массив вместо valie - PullRequest
0 голосов
/ 11 октября 2019

У меня есть следующий вход 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 отсутствует в входящих.data.attributes, displayName будет отсутствовать в выводе.

Любой вывод будет полезен. Спасибо.

1 Ответ

0 голосов
/ 14 октября 2019

Я думаю, что нашел способ получить преобразование. Эта спецификация дает ожидаемый результат:

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