У меня есть следующий JSON. Я хочу изменить имя ключа «freeDelivery» на «isFreeDelivery», но не могу понять, как это сделать.
{
"result": [
{
"deliverySlots": [
{
"id": "2DNN",
"date": "2022-04-05",
"freeDelivery": false,
"label": "All day delivery 08:30am to 5pm",
"price": "£5.00",
"fullSlotId": "2DNN"
},
{
"id": "2DPM",
"date": "2022-04-05",
"freeDelivery": false,
"label": "Afternoon 12pm to 5pm",
"price": "£10.00",
"fullSlotId": "2DPM"
}
]
},
{
"deliverySlots": [
{
"id": "2DNN",
"date": "2022-04-06",
"freeDelivery": false,
"label": "All day delivery 08:30am to 5pm",
"price": "£5.00",
"fullSlotId": "2DNN"
},
{
"id": "2DPM",
"date": "2022-04-06",
"freeDelivery": false,
"label": "Afternoon 12pm to 5pm",
"price": "£10.00",
"fullSlotId": "2DPM"
}
]
}
]
}
Я просмотрел следующие страницы, но до сих пор не могу понять, как это сделать. Должен ли я делать трансформацию или есть более простой способ?
https://github.com/karatelabs/karate/blob/master/karate-junit4/src/test/java/com/intuit/karate/junit4/demos/js-arrays.featurehttps://github.com/karatelabs/карате#json-преобразования
Ну вот:
* def payload = { before: 'foo' }
* remove payload.before
* payload.after = 'bar'
* match payload == { after: 'bar' }
Вместо remove
это также будет работать (используя чистый JS):
* eval delete payload.before
Обновлено: увидев комментарии, я бы отнесся к этому как к преобразованию JSON.
* def payload = { before: 'foo' }
* def fun = function(x){ var res = {}; res.after = x.before; return res }
* def result = fun(payload)
* match result == { after: 'foo' }
Я уверен, что теперь вы захотите «сохранить» все существующие данные. Ладно, вот:
* def payload = { before: 'foo' }
* def fun = function(x){ var res = x; res.after = x.before; delete res.before; return res }
* def result = fun(payload)
* match result == { after: 'foo' }
И вы уже знаете, что вы можете запустить преобразование для всех элементов массива следующим образом:
* def result = karate.map(someArray, fun)
Обратите внимание, что вы можете создать 2 или 3 преобразования — и «вложить» их.
@ Мэтт, посмотри мое редактирование. помимо этого, если вы хотите упрощения, я могу сказать только это: stackoverflow.com/a/54126724/143475
Еще раз спасибо @peter. Мне удалось изменить первое вхождение «id», вручную введя путь json, как показано ниже... но как я могу изменить их все? Должен ли я перебирать их все? Есть ли более простой способ найти ключ без ручного ввода полного пути JSON? * def jsonTransformFunction = function(passedInJson){ var newJson = passInJson; newJson.result[0].deliverySlots[0].changedId = переданоInJson.result[0].deliverySlots[0].id; удалить newJson.result[0].deliverySlots[0].id; вернуть newJson }
@ Мэтт, когда я говорю transform on all array elements
, что является - это петля. в противном случае вы ожидаете, что каратэ будет языком программирования. Мне больше нечего добавить ко всем подсказкам, которые я дал.
Спасибо, Питер, но я не хочу удалять ключ, я просто хочу изменить имя ключа, но сохранить значение. Также есть много случаев использования ключей «freeDelivery», и мне нужно изменить их все. Я добавил больше JSON в вопрос, чтобы он имел больше смысла.