Почтальон получает значение из JSON, где равно значение в массиве, используя JavaScript - PullRequest
0 голосов
/ 27 февраля 2019

В настоящее время используется последняя версия Postman: 6.7.4 (Последняя версия)

Я пытаюсь получить значение из тела ответа JSON и сохранить его в переменной окружения, НО значение 'username'должно быть равно моему предпочтительному имени пользователя.

Обычно я извлекаю значение, подобное этому:

var jsonData = pm.response.json();
pm.environment.set("useridToken", jsonData.Customers[0].userid);

Это даст мне первый элемент в списке, но я не желаю получить ни первый, ни второй элемент из списка.Я хочу получить userid , где username EQUAL"Билли", например.

Вывод ответа тела:

{
"Customers": [
    {
        "id": 24,
        "userid": 73063,
        "username": "BOB",
        "firstname": "BOB",
        "lastname": "LASTNAME
    },
    {
        "id": 25,
        "userid": 73139,
        "username": "Billy",
        "firstname": "Billy",
        "lastname": "lasty"
    }
   ]
}

Любые советы?

Я помню, в SoapUI это было так:

$.channels[?(@.is_archived=='false')].id[0]

Я думаю,это невозможно сделать в JS в Почтальоне?

Ответы [ 6 ]

0 голосов
/ 27 февраля 2019

Попробуйте это

const userid = data.Customers.find(u => u.username === 'Billy') || 'not found';
0 голосов
/ 27 февраля 2019

Вы также можете использовать Lodash для итерации данных и установить это значение:

_.each(pm.response.json().Customers, (item) => {
    if (item.username === "Billy") {
        pm.globals.set('username', item.username)
    }
})
0 голосов
/ 27 февраля 2019

В тестовом скрипте Postnam вы можете использовать some функции Javascript.В вашем случае слишком много способов сделать.Я покажу вам, как решить ваш случай с функцией Array.find:

var jsonData = pm.response.json();
var user = jsonData.Customers.find(function(user) {
    return user.username === 'Billy';
    // OR you could config username in postman env
    // return user.username === pm.variables.get("username_to_find"); 
});
pm.environment.set("useridToken", user.userid);
0 голосов
/ 27 февраля 2019

Ваш userid также можно получить с помощью filter следующим образом -

const data = {
  "Customers": [{
      "id": 24,
      "userid": 73063,
      "username": "BOB",
      "firstname": "BOB",
      "lastname": "LASTNAME"
    },
    {
      "id": 25,
      "userid": 73139,
      "username": "Billy",
      "firstname": "Billy",
      "lastname": "lasty"
    }
  ]
};
const username = 'Billy';
const user = data.Customers.filter(obj => obj.username.toLowerCase() === username.toLowerCase())[0];
const userid = user ? user['userid'] : null;

console.log(userid);

Примечание: .toLowerCase() необязательно здесь, вы можете использовать его в зависимости от вашего состояния.

Тогда вы можете просто установитьэто как -

pm.environment.set("useridToken", userid);
0 голосов
/ 27 февраля 2019

find(), как указывает другой ответ, является лучшим решением здесь, но если имя пользователя не является уникальным, и вы хотите получить массив пользователей с именем пользователя 'Billy', тогда используйте filter()

const jsonData = {
  "Customers": [{
      "id": 24,
      "userid": 73063,
      "username": "BOB",
      "firstname": "BOB",
      "lastname": "LASTNAME"
    },
    {
      "id": 25,
      "userid": 73139,
      "username": "Billy",
      "firstname": "Billy",
      "lastname": "lasty"
    }
  ]
}
console.log(jsonData.Customers.filter(c => c.username === 'Billy'))
0 голосов
/ 27 февраля 2019

Вы можете использовать: Array.prototype.find () :

const data = {
  "Customers": [{
      "id": 24,
      "userid": 73063,
      "username": "BOB",
      "firstname": "BOB",
      "lastname": "LASTNAME"
    },
    {
      "id": 25,
      "userid": 73139,
      "username": "Billy",
      "firstname": "Billy",
      "lastname": "lasty"
    }
  ]
};

const user = data.Customers.find(u => u.username === 'Billy');
const userid = user ? user.userid : 'not found';

console.log(user);
console.log(userid);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...