javascript - 无法访问 JSON 对象,因为 "wrapper"

标签 javascript arrays json

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

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

目前,调用诸如 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() 的按钮。

最佳答案

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

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

尝试像这样改变它:

obj.result[i].someProperty

或者也许:

obj.result[i]["someKey"]

编辑:

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

if(this.readyState = this.DONE)

您应该使用==进行比较,因为 =用于赋值。

关于javascript - 无法访问 JSON 对象,因为 "wrapper",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31315091/

相关文章:

javascript - 在弹出窗口中创建复制按钮

javascript - 使用 Materialize CSS 和 Angular 进行导航栏搜索

sql - Postgres SELECT * FROM 表中数组有元素

json - 使用 swift 将 JSON 嵌套到嵌套字典中

javascript - 如何在 javascript/php 中调用具有子级的数组列表

javascript - 如何使用vendors.ts构建的库并通过webpack导入一次?

c# - 在 A '< List >' 中检索数据/数据

arrays - 无法访问 Julia 数组(BoundsError : attempt to access 0-element Vector{Int64} at index [1] )

json - postgres : how to convert hstore to JSON datatypes

java - JsonMappingException : Cannot find a deserialzer for non-concrete Map type