Javascript JQuery解析JSON对象-不工作?
我有一个有效的json对象,但当我尝试使用jquery/javascript从中提取内存时,它总是返回为“未定义”Javascript JQuery解析JSON对象-不工作?,javascript,jquery,json,Javascript,Jquery,Json,我有一个有效的json对象,但当我尝试使用jquery/javascript从中提取内存时,它总是返回为“未定义” var json = (the string below). var obj = $.parseJSON(JSON.stringify(JSON.stringify(json))); alert(obj); // alerts the object correctly. alert(obj.HotelInformationResponse); // un
var json = (the string below).
var obj = $.parseJSON(JSON.stringify(JSON.stringify(json)));
alert(obj); // alerts the object correctly.
alert(obj.HotelInformationResponse); // undefined..?
alert(obj.HotelInformationResponse.HotelImages); // undefined..?
有人知道我如何从下面的json对象中提取单个hotelImageId
注意:JSON.stringify两次,因为当我做一次时,它仍然显示[Object]
您必须循环对象 然后针对你能做的每一件事 Foreach(对象、项目) 警报(项目.酒店信息响应) 检查完美的代码,我给了你sudo的想法。你写的
var json = (the string below).
所以变量json
是string
类型
var obj = $.parseJSON(JSON.stringify(JSON.stringify(json)));
这意味着
JSON.stringify(json)
将字符串序列化为JSON编码的字符串。所以“a”
变成“a\”
嗯,看来你喜欢stringify。。。更多编码
$.parseJSON(JSON.stringify(JSON.stringify(json))
为什么不
JSON.parse()
。双重编码的字符串不会返回给您。下面是一个JSFIDLE示例,演示如何根据您的请求提取单个hotelImageId:
以下是示例中的代码片段:
var hotelImage = jsonObj.HotelInformationResponse.HotelImages.HotelImage[0],
singleImageId = hotelImage.hotelImageId;
它工作得很好,下面是一个jsFiddle来证明它: 我甚至想象它,并使它使用一个彩色框-点击缩略图,它会显示全尺寸的图像 JS
var images = json.HotelInformationResponse.HotelImages.HotelImage;
$.each(images, function(idx, data) {
$("#images")
.append($("<div></div>")
.append($("<a></a>").prop("href", data.url).addClass("colorbox")
.append($("<img></img>").prop("src", data.thumbnailUrl)))
.append($("<span></span>").text(data.caption || data.hotelImageId)));
console.log("data", data);
});
$(".colorbox").colorbox();
html { padding: 20px; }
#images div { display: inline-block; width: 90px; height: 100px; }
#images img { display: block; width: 70px; margin: 0 auto; }
#images span { display: block; text-align: center; }
究竟为什么要将JSON对象转换为字符串(两次)并返回JSON?“正确地提醒对象”你确定吗?如果它确实是一个对象,它应该发出警报。如果看到对象的实际属性,则仍然有一个字符串。编辑:只需阅读“JSON.stringify两次,因为当我做一次时,它仍然显示[Object]”。这是正确的输出。如果
json
是一个字符串,只需执行json.parse(json)
。如果它实际上是一个对象,你不必做任何事情。“nb:JSON.stringify两次,因为当我做一次时,它仍然会说[object object]”:当我在Chrome 23中尝试它时,这不会发生。在这里,第一个JSON.stringify返回一个字符串,而不是一个object.properties,因为当我执行一次时,它可能会重复:ie:var obj=$.parseJSON(JSON.stringify(JSON));我确实提醒(obj)它仍然说[对象对象]…HotelInformationResponse
似乎是顶级对象的属性,所以如果obj
实际上是一个对象,obj.HotelInformationResponse
应该可以。
var images = json.HotelInformationResponse.HotelImages.HotelImage;
$.each(images, function(idx, data) {
$("#images")
.append($("<div></div>")
.append($("<a></a>").prop("href", data.url).addClass("colorbox")
.append($("<img></img>").prop("src", data.thumbnailUrl)))
.append($("<span></span>").text(data.caption || data.hotelImageId)));
console.log("data", data);
});
$(".colorbox").colorbox();
html { padding: 20px; }
#images div { display: inline-block; width: 90px; height: 100px; }
#images img { display: block; width: 70px; margin: 0 auto; }
#images span { display: block; text-align: center; }