#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 решения:
- Используя foreach, вы можете перебирать массив и выполнять операцию с каждым значением имени.
- Используя 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<
});