Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery解析JSON对象-不工作?_Javascript_Jquery_Json - Fatal编程技术网

Javascript JQuery解析JSON对象-不工作?

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

我有一个有效的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);    // 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; }