Перебираем МАССИВ JSON и получаем значение с помощью node.js

#node.js #arrays #json #parsing

#node.js #массивы #json #синтаксический анализ

Вопрос:

У меня есть http-запрос в строке json, и мне нужен ответ.. Мне нужно получить значение из строки, чтобы я мог точно возвращать ответ, мне нужно значение QueryResult-> outputContexts->name 1st(item) . Строка json выглядит следующим образом:

 {
    "responseId": "61e3f7da-b529-49e0-80-9eaae4695ec1-ee7586fb",
    "queryResult": {
        "queryText": "Get My VIP Card",
        "parameters": {
            "PARAM": ""
        },
        "allRequiredParamsPresent": true,
        "outputContexts": [
            {
                "name": "projects/mbmsoft-nehh/agent/sessions/v-2-404581/contexts/fulllllll-followup",
                "lifespanCount": 1,
                "parameters": {
                    "PARAM": "",
                    "PARAM.original": ""
                }
            },
            {
                "name": "projects/mbmsoft-nehh/agent/sessions/v-2-4024581/contexts/__system_counters__",
                "lifespanCount": 1,
                "parameters": {
                    "no-input": 0,
                    "no-match": 0,
                    "PARAM": "",
                    "PARAM.original": ""
                }
            }
        ],
        "intent": {
            "name": "projects/mbmsoft-nehh/agent/intents/74a9a-335b-46ea-817a-2cb45fcc04a5",
            "displayName": "fulllllll"
        },
        "intentDetectionConfidence": 1,
        "languageCode": "en"
    },
    "originalDetectIntentRequest": {
        "payload": {
            "source": "viber",
            "body": {
                "timestamp": 1604958504809,
                "event": "message",
                "silent": false,
                "sender": {
                    "api_version": 8,
                    "name": "john smith",
                    "country": "MK",
                    "language": "en-US",
                    "id": "as6q0NaBQjKiTPDw=="
                },
                "message": {
                    "type": "text",
                    "text": "Get My VIP Card"
                },
                "chat_hostname": "SN-CHAT-10_",
                "message_token": 5506704778261146000
            },
            "contact": {
                "cId": "as6q0NQQ IdadsajKiTPDw=="
            }
        }
    },
    "session": "projects/mbmsoft-nehh/agent/sessions/v-2-424581"
}
  

Пока я читал, я должен перебирать объекты в массиве строк, но я не смог найти похожий образец, так как объекты внутри разные..
Мне нужно некоторое базовое руководство, как перебирать массив json в node.js большое
спасибо

Комментарии:

1. Может быть, попробуйте что-то вроде: QueryResult.outputContexts.map(obj => {return {name: obj.name }}). Я не уверен, что это то, чего вы хотите.

Ответ №1:

Чтобы выполнить то, что вы хотите, вы хотели бы взглянуть на документацию по массиву, поскольку QueryResult-> outputContexts — это массив. Кроме того, чтобы понять некоторые части решения, которое я публикую, о деструктурировании назначений.

 const response = {
    "responseId": "61e3f7da-b529-49e0-80-9eaae4695ec1-ee7586fb",
    "queryResult": {
        "queryText": "Get My VIP Card",
        "parameters": {
            "PARAM": ""
        },
        "allRequiredParamsPresent": true,
        "outputContexts": [
            {
                "name": "projects/mbmsoft-nehh/agent/sessions/v-2-404581/contexts/fulllllll-followup",
                "lifespanCount": 1,
                "parameters": {
                    "PARAM": "",
                    "PARAM.original": ""
                }
            },
            {
                "name": "projects/mbmsoft-nehh/agent/sessions/v-2-4024581/contexts/__system_counters__",
                "lifespanCount": 1,
                "parameters": {
                    "no-input": 0,
                    "no-match": 0,
                    "PARAM": "",
                    "PARAM.original": ""
                }
            }
        ],
        "intent": {
            "name": "projects/mbmsoft-nehh/agent/intents/74a9a-335b-46ea-817a-2cb45fcc04a5",
            "displayName": "fulllllll"
        },
        "intentDetectionConfidence": 1,
        "languageCode": "en"
    },
    "originalDetectIntentRequest": {
        "payload": {
            "source": "viber",
            "body": {
                "timestamp": 1604958504809,
                "event": "message",
                "silent": false,
                "sender": {
                    "api_version": 8,
                    "name": "john smith",
                    "country": "MK",
                    "language": "en-US",
                    "id": "as6q0NaBQjKiTPDw=="
                },
                "message": {
                    "type": "text",
                    "text": "Get My VIP Card"
                },
                "chat_hostname": "SN-CHAT-10_",
                "message_token": 5506704778261146000
            },
            "contact": {
                "cId": "as6q0NQQ IdadsajKiTPDw=="
            }
        }
    },
    "session": "projects/mbmsoft-nehh/agent/sessions/v-2-424581"
};

const { queryResult } = response;
const { outputContexts } = queryResu<

outputContexts.forEach(({ name }) => {
    
    console.log(name);
    
});

const nameArray = outputContexts.map(({ name }) => {
    
    return name;
    
});

console.log(nameArray);  

В ответе есть 2 решения:

  1. Используя foreach, вы можете перебирать массив и выполнять операцию с каждым значением имени.
  2. Используя map, вы можете создать массив со всеми значениями имен и использовать его по своему усмотрению.

Надеюсь, это помогло!

Ответ №2:

1.Я следую инструкциям от @Nicolas Mauricio, я продвинулся вперед следующим образом:

 exports.id_session = function () {
    const { queryResult } = response;
    const { outputContexts } = queryResu<
    const nameArray = outputContexts.map(({ name }) => {
        return name;
    });
    console.log(nameArray)
    let a, b, rest;
    [a, ...rest] = nameArray;
    console.log(a);
    return a; 
};
  

Поскольку я очень новичок в node.js Я буду благодарен всем, кто может отправить какой-нибудь другой способ извлечения значения из массива json.

Ответ №3:

В то же время я нашел очень простой способ получить значение из массива json следующим образом:

Важное ЗАМЕЧАНИЕ (особенно для новичков):

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

Полный образец ответа записывается в начале этого потока.

 http request code 
...
res.on("end", function (chunk) {
    var body = Buffer.concat(chunks);
    const response = JSON.parse(body.toString()); //convert string to JSON object

    var result = response.originalDetectIntentRequest.payload.contact.cId;
    console.log(result);
    return resu<
 });
  

или:

 ...
    var result = response.queryResult.outputContexts[0].name;
    console.log(result);
    return resu<
  });