Почтальон JSON анализирует массивы тела ответа внутри массивов - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть этот JSON-ответ от вызова API

[
    {
        "id": 20599,
        "name": "Deliver",
        "options": [
            {
                "id": 63775,
                "name": "Item",
                "dataType": "SelectMultiOption",
                "required": false,
                "options": [
                    {
                        "id": 426,
                        "name": "Towels"
                    },
                    {
                        "id": 427,
                        "name": "Toothbrush"
                    },
                    {
                        "id": 428,
                        "name": "Pillow"
                    }
                ]
            }
        ]
    }
]

Я использую этот код для получения идентификатора службы "Доставка"

var data = JSON.parse(responseBody); 
var loop_count = 0

for (count = 0; count < data.length; count++)
{
    if (data[count].name == "Deliver")
    {
        var job_id = data[count].id;
        postman.setEnvironmentVariable("service_id", job_id);

    }
}

Вопросы:

  1. Как я могу получить значение из массива «options», мне нужно получить «id»: 63775 и сохранить как «item_id», а «name»: «Item» - как «item_name» переменных почтальона.
  2. Затем мне нужно выбрать «опции», вложенные в запись «Item», и выбрать опцию «name»: «Зубная щетка» и сохранить в переменной почтальона «svc_optn_optn_name», а ее «id» хранится в «svc_optn_optn_id»

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Это решение

var data = JSON.parse(responseBody); 
variable named as data
var loop_count = 0

for (count = 0; count < data.length; count++)
{
    if (data[count].name == "Deliver")
    {
        var job_id = data[count].id;
        postman.setEnvironmentVariable("service_id", job_id);
        var job1_name = data[count].options[0].name;
        postman.setEnvironmentVariable("item_name", job1_name);
        var job2_id = data[count].options[0].id;
        postman.setEnvironmentVariable("item_id", job2_id);
        var job3_id = data[count].options[0].options[1].id;
        postman.setEnvironmentVariable("svc_optn_optn_id", job3_id);
        var job4_name = data[count].options[0].options[1].name;
        postman.setEnvironmentVariable("svc_optn_optn_name", job4_name);

    }
0 голосов
/ 14 декабря 2018

Здесь я даю собственное предложение по вашей проблеме с несколькими строками кода.Я не уверен, как вы собираетесь использовать эти значения.Я также не знаю, всегда ли во внешнем массиве опций будет 1 элемент или больше.Я только что пытался удовлетворить ваши вопросы.

Пожалуйста, спросите / прокомментируйте, если у вас есть дополнительные сомнения или я ошибаюсь.

Я создал функцию getAllPostmanDataFrom(obj), которая принимает объект в качестве параметра, который является значением data[count], собирает необходимую информацию в другом объекте postmanObj и возвращает ее вызывающей стороне.

function getAllPostmanDataFrom(obj) {
    const item_id = obj.options[0].id;
    const item_name = obj.options[0].name;
    const svc_optn_optn_name = obj.options[0].options[1].name;
    const svc_optn_optn_id = obj.options[0].options[1].id;

    const postmanObj = {item_id, item_name, svc_optn_optn_id, svc_optn_optn_name}; // Return object
    return postmanObj;
}

var data = [
    {
        "id": 20599,
        "name": "Deliver",
        "options": [
            {
                "id": 63775,
                "name": "Item",
                "dataType": "SelectMultiOption",
                "required": false,
                "options": [
                    {
                        "id": 426,
                        "name": "Towels"
                    },
                    {
                        "id": 427,
                        "name": "Toothbrush"
                    },
                    {
                        "id": 428,
                        "name": "Pillow"
                    }
                 ]
            }
        ]
    }
]

var count = 0;
var obj = data[count];
var postmanObj = getAllPostmanDataFrom(obj);
//var {item_id, item_name, svc_optn_optn_id} = postmanObj;

console. log(postmanObj) 
/*
console.log(item_id);
console.log(item_name);
console.log(svc_optn_optn_id);
console.log(svc_optn_optn_name);
*/

Наконец, вы можете использовать значения, содержащиеся в postmanObj следующим образом :.

postman.setEnvironmentVariable("item_id", postmanObj.item_id);
postman.setEnvironmentVariable("item_name",  postmanObj.item_name);

И так далее.

0 голосов
/ 14 декабря 2018
const data = JSON.parse(responseBody);
data.forEach(item => {
    console.log(item.id); // deliver object id.
    item.options.forEach(option => {
        console.log(`Option Id ${option.id}`); // option id
        postman.setEnvironmentVariable("service_id", option.id);
        option.options(optionItem => {
            if(optionItem.name == 'Toothbrush'){
                postman.setEnvironmentVariable("svc_optn_optn_name", optionItem.name);
                postman.setEnvironmentVariable("svc_optn_optn_id", optionItem.id);
            }
        });
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...