Как добавить новые поля в существующие json - PullRequest
0 голосов
/ 10 января 2020

У меня есть вывод json, как это

[

"city": [
    {
      "street": "street"
      "zip": "223344"
    }
  ]
    "document": [
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "12345678",
      "file_name": "test.xml"
    }
  ]
]

, и я хочу добавить в «документ» новые поля, чтобы новый вывод был таким

[

"city": [
    {
      "street": "street"
      "zip": "223344"
    }
  ]
    "document": [
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "12345678",
      "file_name": "test.xml"
    },
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "123456789",
      "file_name": "test2.xml"
    },
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "1234567800",
      "file_name": "test3.xml"
    }
  ]
]

как я могу добавить новые поля? Я пытался сделать это с помощью кода, но, к сожалению, я не получил правильный результат

payload map(value) -> value ++
document: vars.documentsInfo map {
    date: $.createdAt,
    id: $.id,
    file_name: $.name
  }

Ответы [ 3 ]

1 голос
/ 13 января 2020

Если вы используете dw 2.0 и mule runtime 4.2.2 (или более позднюю), вы можете использовать функцию update .

Input

[
  {
    "city": [
      {
        "street": "street",
        "zip": "223344"
      }
    ]
  },
  {
    "document": [
      {
        "date": "2020-01-10T04:04:01-08:00",
        "id": "12345678",
        "file_name": "test.xml"
      }
    ]
  }
]

Скрипт передачи данных

%dw 2.0
import * from dw::util::Values
output application/json
var data = [
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "123456789",
      "file_name": "test2.xml"
    },
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "1234567800",
      "file_name": "test3.xml"
    }
]
---
payload update "document" with flatten(payload.document + data)

Вывод

[
  {
    "city": [
      {
        "street": "street",
        "zip": "223344"
      }
    ]
  },
  {
    "document": [
      {
        "date": "2020-01-10T04:04:01-08:00",
        "id": "12345678",
        "file_name": "test.xml"
      },
      {
        "date": "2020-01-10T04:04:01-08:00",
        "id": "123456789",
        "file_name": "test2.xml"
      },
      {
        "date": "2020-01-10T04:04:01-08:00",
        "id": "1234567800",
        "file_name": "test3.xml"
      }
    ]
  }
]
0 голосов
/ 12 января 2020

К сожалению, в случае с dataweave в настоящее время нет хорошего способа «обновить» массив, поле или объект. Таким образом, обходной путь - сохранить начальное значение, объединить его с новыми объектами, которые вы хотите добавить в массив документов, удалить начальную информацию и добавить объединенные значения. Я сделал это здесь, используя do в dw2.0, надеюсь, это поможет:

%dw 2.0
output application/json
var obj = {
  "city": [
    {
      "street": "street",
      "zip": "223344"
    }
  ],
  "document": [
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "12345678",
      "file_name": "test.xml"
    }
  ]
}

var documents = [
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "123456789",
      "file_name": "test2.xml"
    },
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "1234567800",
      "file_name": "test3.xml"
    }
]


---
do {
    var originalDoc = obj.document
    var newDocumentsArray = documents ++ originalDoc
    ---
    (obj - "document") ++ {documents: newDocumentsArray}
}
0 голосов
/ 10 января 2020

Входная полезная нагрузка:

{
  "city": [
    {
      "street": "street",
      "zip": "223344"
    }
  ],
  "document": [
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "12345678",
      "file_name": "test.xml"
    }
  ]
}

Потоковая переменная с именем "documentsInfo":

[
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "123456789",
      "file_name": "test2.xml"
    },
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "1234567800",
      "file_name": "test3.xml"
    }
]

Плетение данных:

%dw 2.0
output application/json
---
{
    city: payload.city,
    documents: payload.document ++ vars.documentsInfo
}

Производит вывод:

{
  "city": [
    {
      "street": "street",
      "zip": "223344"
    }
  ],
  "documents": [
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "12345678",
      "file_name": "test.xml"
    },
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "123456789",
      "file_name": "test2.xml"
    },
    {
      "date": "2020-01-10T04:04:01-08:00",
      "id": "1234567800",
      "file_name": "test3.xml"
    }
  ]
}
...