无法从JSON数据中获取密钥的值

时间:2018-05-11 11:32:45

标签: json typescript protractor

如果我从POST请求获得JSON响应中的“id”,我正在尝试获取值。

{
"callId": "87e90efd-eefb-456a-b77e-9cce2ed6e837",
"commandId": "NONE",
"content": [
    {
        "scenarioId": "SCENARIO-1",
        "Channel": "Channel1-1",
        "data": {
            "section": {
                "class": {
                    "repository": [
                        {
                            "export": "export-1",
                            "modules": "module-1",
                            "index": "23",
                            "period": {
                                "axis": {
                                    "new_channel": "channel-1.1"
                                },
                                "points": [
                                    {
                                        "id": "6a5474cf-1a24-4e28-b9c7-6b570443df9c",
                                        "duration": "150",
                                        "v": 1.01,
                                        "isNegligible": false
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }
]
}

我能够显示整个响应json,并且还可以使用下面的代码获取“callId”的值。在最后一行得到错误:

Cannot read property '0' of undefined

代码段:

function callback(error, response, body) {
  if (!error && response.statusCode == 200) {
    let responseData = JSON.stringify(body);
    //Display the entire response
    console.log(responseData);
    //Display the callId
    console.log(body['callId']);
    //Getting error here
    console.log(body.content[0].repository[0].points[0].id);
  }
}

获得“id”值的任何解决方案?

1 个答案:

答案 0 :(得分:2)

目前您正在尝试记录body.content[0].repository[0].points[0].id)

如果仔细观察,repository[0]是一个对象,它没有直接的子点。

因此,repository[0].points将评估为未定义,并通过指定repository[0].points[0],您尝试访问未定义的属性0作为错误状态。 访问id的正确方法如下:

body.content[0].data.section.class.repository[0].period.points[0].id

如果您对解析JSON感到困惑,可以通过安慰body然后在控制台或JSONeditor中扩展它来分解它

PS:还建议您在尝试访问更深层的子元素之前检查每个级别是否存在该值,因为在某些情况下,您的body可能不包含其中一个值,例如内容。在这种情况下,尝试访问body.content[0]将导致错误。所以建议在每个级别进行检查,如下所示

if(body){
    if(body.content){
        if(body.content[0]){
            /* and so on*/
        }
    }
}