空手道 - 如何在 JSON 中更改键名
Karate - How change key name in JSON
我有以下JSON。我想将 keyName '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.feature
https://github.com/karatelabs/karate#json-transforms
给你:
* 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 个转换并“嵌套”它们。
我有以下JSON。我想将 keyName '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.feature https://github.com/karatelabs/karate#json-transforms
给你:
* 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 个转换并“嵌套”它们。