首页 > 解决方案 > 已解析的 Json 数组在 Dialogflow 中显示未定义

问题描述

以下是我的 json 数据:

{
    "code": "200",
    "count": 3,
    "data": [
        {
            "_id": "602a2d4427e5ac1f5c8e897b",
            "survey_id": "602a5de91d4f0000ec004b94",
            "parent_question_id": "",
            "is_required": "1",
            "is_active": "1",
            "options": [
                {
                    "_id": "604b22c53b57d53fdc8c43f3",
                    "question_id": "602a2d4427e5ac1f5c8e897b",
                    "option_type_id": "602a2b0127e5ac1f5c8e8976",
                    "option_details": "He/She is good.",
                    "is_active": "1"
                },
                {
                    "_id": "604b22df3b57d53fdc8c43f5",
                    "question_id": "602a2d4427e5ac1f5c8e897b",
                    "option_type_id": "602a2b0127e5ac1f5c8e8976",
                    "option_details": "He/She is Average.",
                    "is_active": "1"
                },
                {
                    "_id": "604b22e63b57d53fdc8c43f6",
                    "question_id": "602a2d4427e5ac1f5c8e897b",
                    "option_type_id": "602a2b0127e5ac1f5c8e8976",
                    "option_details": "He/She is Poor.",
                    "is_active": "1"
                },
                {
                    "_id": "604b22d33b57d53fdc8c43f4",
                    "question_id": "602a2d4427e5ac1f5c8e897b",
                    "option_type_id": "602a2b0127e5ac1f5c8e8976",
                    "option_details": "He/She is Excellent.",
                    "is_active": "1"
                }
            ],
            "qustion_type": {
                "_id": "602a2b2627e5ac1f5c8e8978",
                "question_type": "Multie Radio",
                "is_active": "1"
            }
        },
    ]
}

在这里,我想获取“option”数组中的“option_details”的数据。我能够得到选项数组。

以下是我的代码:

return 
  axios.get(api call here)
  .then((results) => {
    results.data.data.map(quesobj => {
      ques.push(quesobj.question_text);
    })
    console.log(ques);
    results.data.data.map(questypeobj => {
      questype.push(questypeobj.qustion_type.question_type);
    })
    results.data.data.map(optionobj => {
      option.push(optionobj.options);
    })
    console.log("Hello");
    console.log(option);
    console.log(option[0]);
    console.log(option[0].option_details);
    conv.add('Thank you');
  })

在控制台中,当我打印选项时,它会显示来自 api 的选项数组。但是当我打印 option[0] 时,它会出现 [] 而当我打印 option[0].option_details 时,它会出现未定义。我该如何解决这个问题?

有人可以帮我吗?

标签: node.jsactions-on-googledialogflow-es-fulfillment

解决方案


到底是怎么回事

在您的 json 数据中,options是一个数组。所以,这一行:

option.push(optionobj.options)

会将一些数组推送到您的option变量中。最后,option是一个数组数组option[0]是一个数组,并且option[0].option_details是未定义的。

建议

如果我理解正确,您希望option成为一个包含options属性中所有项目的数组。您可以使用扩展运算符来做到这一点,从:

option.push(optionobj.options)

至 :

option.push(...optionobj.options);

扩展运算符会将所有项目optionobj.options(而不是数组本身,这就是区别)推送到option

您可以在此处找到有关传播语法的更多信息


推荐阅读