这个想法是,我调用 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/