Почтальон - Как заменить значения для всех определенных свойств в ответе JSON, чтобы использовать его позже в качестве тела другого запроса.

У меня есть 2 запроса API. 1-й - GET, который возвращает ответ. Этот ответ используется как тело/полезная нагрузка во втором запросе (POST). НО Полезная нагрузка должна иметь определенные значения, которые необходимо заменить перед использованием во втором запросе (в моем случае ниже это должно быть значение для свойства «Статус»).

Как мне это сделать?

Вот мой пример ответа:

{  
   "Variations":[  
      {  
         "ItemIds":[  
            "xxx"
         ],
         "Items":[  
            {  
               "Id":"67-V1",
               "GuId":"xxx",
               "Type":"Unit",
               "Status":"Active"
            }
         ],
         "Name":"VAR 1",
         "Id":"67-V1"
      },
      {  
         "ItemIds":[  
            "yyy"
         ],
         "Items":[  
            {  
               "Id":"67-V2",
               "GuId":"yyy",
               "Type":"Unit",
               "Status":"Active"
            }
         ],
         "Name":"VAR 2",
         "Id":"67-V2"
      },
      {  
         "ItemIds":[  
            "zzz"
         ],
         "Items":[  
            {  
               "Id":"67-V3",
               "GuId":"zzz",
               "Type":"Unit",
               "Status":"Active"
            }
         ],
         "Name":"VAR 3",
         "Id":"67-V3"
      }
   ],
   "ItemIds":[  

   ],
   "Items":[  

   ],
   "Name":"MAINP",
   "Id":"67",
   "Color":null
}

Вот мой код, но он не работает (запасная часть):

var jsonData = pm.response.json();

function replaceStatus() {
    _.each(jsonData.Variations, (arrayItem) => {
        if(arrayItem.Items.Status !== "NonActive") {

            arrayItem.Items.Status == "NonActive";
            console.log("arrayItem " + arrayItem);
        }
    });
}

pm.test("Run Function", replaceStatus ());

pm.sendRequest({
    url: 'localhost:3000/post',
    method: 'POST',
    headers: {
        "Content-Type": "application/json"
    },
    body: {
        mode: 'raw',
        raw: JSON.stringify(jsonData)
    }
}, (err, res) => {
    console.log(res)
})

person KVN    schedule 31.07.2019    source источник


Ответы (2)


Я предполагаю, что вы пытаетесь заменить все значения NonActive на Active. В этом случае для назначения следует использовать =, а не ==. Предоставленный вами файл JSON недействителен, и ваш код не может быть запущен на моем компьютере. Я рад взглянуть поближе, если это не сработало

На основании ваших обновлений необходимо внести эти изменения

1- чтобы иметь дело с объектом JSON, вам нужно проанализировать ответ, поскольку он string, и вы не можете вызывать что-то вроде JsonData.Variations для этого. Убедитесь, что jsonData является объектом JSON. если нет, добавьте что-то вроде этого, чтобы проанализировать его

var parsedJson = JSON.parse(jsonData)

2- Кажется, вы пропустили один слой массива в своей функции для перебора items. Поскольку у вас есть два вложенных массива для достижения Status, функция replaceStatus должна быть такой, как показано ниже.

function replaceStatus() {
    _.each(parsedJson.Variations, (arrayItem) => {
        _.each(arrayItem.Items, (item) => {
            if(item.Status !== "NonActive") {
                item.Status = "NonActive";
                console.log("arrayItem " + item.Status);
            }
        });
    });
}
person Mehran    schedule 02.08.2019
comment
Спасибо @Мехран! Я исправил ответ JSON (в исходном сообщении). И я также пробовал с = вместо ==. Но похоже, что это все еще не работает. ИЛИ, может быть, я делаю это неправильно. т.е. Я не вижу эту строку для вывода в Консоль - console.log("arrayItem " + arrayItem); Также я не уверен, как сделать обновленным jsonData (после замены значений). - person KVN; 07.08.2019
comment
@KVN делает JSON действительным, проверяя его в онлайн-линтере JSON. Я почти уверен, что решение работает, поскольку я пробовал его на своей машине. Также попробуйте это без разбора JSON, поскольку я подозреваю, что «.json» в первой строке вашего кода анализирует его, и вы буквально анализируете его два раза. - person Mehran; 07.08.2019
comment
Спасибо @Мехран! Да, кажется, что дополнительный разбор был ненужным. И вроде работает! (P.S. Я удалил свой последний комментарий, чтобы опубликовать его немного измененным, прежде чем я увидел ваш последний ответ). Очень ценю вашу помощь! - person KVN; 07.08.2019

Вы разместили весь свой код в разделе тестов или только его часть? Из одного из ваших комментариев я увидел, что вы не можете видеть вывод, зарегистрированный на консоли.

Это может быть очень тривиально, но, если вы разместили весь свой код, похоже, что вы забыли вызвать свою функцию replaceStatus() перед почтовым вызовом.

person Derryl Thomas    schedule 07.08.2019
comment
Спасибо @Derryl Thomas за указание на это. Мне действительно не хватает, чтобы на самом деле использовать его: / Добавлено сейчас. - person KVN; 07.08.2019