因为“包装器”而无法访问JSON对象

时间:2015-07-09 10:42:24

标签: javascript arrays json

我的想法是我调用REST API,返回一个JSON数组,然后将该数组构建到表中。

当API调用返回数组时,它将所有内容包装在“result”对象中,这使我很难实际访问数组中的任何内容。有没有办法剥离“结果”层,以便我实际上能够做我需要做的事情。

目前,调用类似obj.result的内容会返回undefined,其中obj是我从API获得的响应的JSON.parse版本。

我已经包含了一个返回响应的片段,以及我用来尝试处理它的代码。

{
    "result": [{
        "incident_state": "7",
        "short_description": "question about 1010 EB1",
        "number": "INC1785295"
    }, {
        "incident_state": "7",
        "short_description": "Software Update",
        "number": "INC1785559"
    }, {
        "incident_state": "7",
        "short_description": "RI 113 - Not Displaying Laptop VGA",
        "number": "INC1785587"
    }, {
        "incident_state": "7",
        "short_description": "[HD] SAS 2229: Lectern PC",
        "number": "INC1785640"
    }, {
        "incident_state": "7",
        "short_description": "SAS 2229",
        "number": "INC1785644"
    }, {
        "incident_state": "7",
        "short_description": "Aerial Email Manager: BU 2111: Lectern PC Down",
        "number": "INC1785671"
    }, {
        "incident_state": "7",
        "short_description": "Burlington Labs 2111",
        "number": "INC1785673"
    }, {
        "incident_state": "7",
        "short_description": "EB3 2207: Training Request",
        "number": "INC1785703"
    }, {
        "incident_state": "7",
        "short_description": "BU 2111: Lectern PC",
        "number": "INC1785759"
    }, {
        "incident_state": "7",
        "short_description": "[RC] SAS 1220: Telephone",
        "number": "INC1785812"
    }, ]
}
var response = null;

function getAction(){
    document.getElementById("expanded").innerHTML = "Calling...";
    var client=new XMLHttpRequest();
    client.open("GET","https://demo.service-now.com/api/now/v1/table/incident?sysparm_fields=short_description,number,incident_state");
    client.setRequestHeader('Accept','application/json');
    client.onreadystatechange = function(){
        if(this.readyState = this.DONE){
            document.getElementById("expanded").innerHTML = "";
            response = this.response;
            alert("API Call Completed, awaiting processing.");
            //document.getElementById("response").innerHTML = this.response;
        }};
    client.send();
}

function processData(){
    var obj = JSON.parse(response);
    for(var i = 0; i < obj.result.length; i++) {
        document.getElementById("expanded").innerHTML = obj.result[0][i];
    }
    document.getElementById("response").innerHTML = JSON.stringify(obj);
}

编辑:

我忘了把它包含在我的HTML页面上,有一个按钮来调用getAction(),然后一旦它结束,就会有一个按钮来调用processData()。

2 个答案:

答案 0 :(得分:1)

实际上你是在循环json数组的元素,但是你试图访问错误的属性或错误的值。

正如评论中提到的那样,obj.result[0][i]总是试图从数组中的第一个对象获取索引为i的元素。

尝试改变它:

obj.result[i].someProperty

或者也许:

obj.result[i]["someKey"]

修改

另请注意,if条件不是corerct,因为您不在此处进行比较:

if(this.readyState = this.DONE)

您应该使用==进行比较,因为=用于分配。

答案 1 :(得分:0)

正如@open and free提到的,这是一个JSON.parse问题...删除数组中的最后一个逗号char,它可以正常工作