Каратэ - Как изменить имя ключа в JSON

У меня есть следующий 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-преобразования

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну вот:

* 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 преобразования — и «вложить» их.

Спасибо, Питер, но я не хочу удалять ключ, я просто хочу изменить имя ключа, но сохранить значение. Также есть много случаев использования ключей «freeDelivery», и мне нужно изменить их все. Я добавил больше JSON в вопрос, чтобы он имел больше смысла.

Matt 01.04.2022 17:24

@ Мэтт, посмотри мое редактирование. помимо этого, если вы хотите упрощения, я могу сказать только это: stackoverflow.com/a/54126724/143475

Peter Thomas 01.04.2022 18:29

Еще раз спасибо @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 }

Matt 04.04.2022 21:03

@ Мэтт, когда я говорю transform on all array elements, что является - это петля. в противном случае вы ожидаете, что каратэ будет языком программирования. Мне больше нечего добавить ко всем подсказкам, которые я дал.

Peter Thomas 05.04.2022 07:18

Другие вопросы по теме