空手道 - 如何在 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 个转换并“嵌套”它们。