javascript - Javascript - 无法解析包含转义符的JSON对象

我是javascript的新手,在学习AJAX调用和解析JSON对象,所以,我知道我遗漏了一些明显的东西。我可以从API检索JSON字符串,但是,不能正确解析它,我不确定我是否发送了一个无法解析的JSON对象,或者只是试图以错误的方式读取字段。

在this.responseText中可以得到JSON字符串,但是,当我尝试访问字段标题时,我只得到undefiend ,我想用这种方式访问它: this.responseText.title我也尝试过:this.responseText [title]和this.responseText ["title"]


"{"Id":220,"Title":"Drawtober 19","YearCreated":0,"DatePublished":"2018-12-14T03:27:05.51"}" 



就是我从AJAX调用中得到的,并且我尝试获得标题:


var xhttp = new XMLHttpRequest();


 xhttp.onreadystatechange = function() {


 if (this.readyState == 4 && this.status == 200) {


 let x = this.responseText;


 let firstTest = JSON.parse(x[0]);


 let secondTest = JSON.parse(x.Title);


 }


 };


 xhttp.open("GET","http://www.faithfulimagination.com/api/artwork/220", true);


 xhttp.send();


 }



我希望看到"drawtober 19",而且我得到的只是"undefined'

时间:

你的响应被编码两次,所以,你需要对它进行两次解码:


let data = JSON.parse(JSON.parse(x));


let title = data.Title;



双重编码没有充分的理由。如果faithfulimagination.com是你的站点,你应该修复它。

仅使用JSON.parse(x)解析完整对象:


const x ="{"Id":220,"Title":"Drawtober 19","YearCreated":0,"DatePublished":"2018-12-14T03:27:05.51"}";


const res = JSON.parse(x);


console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }

你需要使用JSON.parse(this.responseText)将响应字符串解析为一个对象,你的属性将位于该方法返回的对象上。


JSON.parse(this.responseText).Title



xhr请求只返回json字符串,在使用之前,必须将它解析为javascript对象,然而 let firstTest = JSON.parse(x[0]); 因为对象x不是数组,所以,只返回无效,


var xhttp = new XMLHttpRequest();


 xhttp.onreadystatechange = function() {


 if (this.readyState == 4 && this.status == 200) {


 let x = JSON.parse(this.responseText);


 //let firstTest = JSON.parse(x[0]); Invalid because x is not an array


 let secondTest = JSON.parse(x.Title);


 }


 };


 xhttp.open("GET","http://www.faithfulimagination.com/api/artwork/220", true);



 xhttp.send();


 }



...