Как динамически изменить большой JSON в рамках каратэ? - PullRequest
1 голос
/ 03 апреля 2019

У меня есть следующий JSON

{
  "updated": [
    {
      "id": "1",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 21,
      "gender": "male"
    },
    {
      "id": "2",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 22,
      "gender": "male"
    },
    {
      "id": "3",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 23,
      "gender": "male"
    }
  ],
  "deleted": [
    {
      "id": "4",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 31,
      "gender": "male"
    },
    {
      "id": "5",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 32,
      "gender": "male"
    },
    {
      "id": "6",
      "email": "api.test@test.io",
      "businessUnit": "US",
      "firstName": "John",
      "lastName": "Doe",
      "age": 33,
      "gender": "male"
    }
  ]
}
  1. Возможно ли изменить поля 'id' другим способом, а не:

    • set req.updated[0] .id = userId
    • set req.updated [1] .id = userId
    • set req.updated [2] .id = userId
  2. Можно ли изменить все поля 'id' в обоих разделах, 'обновленные' и 'удаленные', например:

    • set req [*]. Id = userId

1 Ответ

1 голос
/ 04 апреля 2019

EDITED: Хорошо, вы хотите использовать массовое редактирование и иметь некоторую логику для увеличения идентификаторов одновременно.Поэтому используйте преобразования: https://github.com/intuit/karate#json-transforms

Обратите внимание, что karate.map(x, i) принимает необязательный второй аргумент, который дает вам индекс цикла.

* def data = [{}, {}, {}]
* def fun = function(x, i){ x.id = ~~(i + 1); return x }
* def payload = karate.map(data, fun)
* match payload == [{id: 1}, {id: 2}, {id: 3}]
...