0

我正在处理我的第一个(EVER!)JSON 项目,我想知道如何从 JSON 对象获取特定数据。我已经将其导入,并且刚刚发现(感谢堆栈溢出!)如何引用该数据。我现在能够做到这一点,下面的代码就是我所得到的。我有一堆通过数据的警报。我现在需要做的实际上是循环遍历并评估下面显示的 JSON 的 value 字段。我不知道如何选择它,以及如何循环它。我已经尝试过 data.films.value.value 和 data.films.value.value[0] 之类的东西,我敢肯定它接近那个,但我不知道如何获取数据成一种形式,让我可以像使用常规字符串一样使用该特定元素。我最终想做的是比较每部电影。

{
    "

films": [{
        "label": "34",
        "value": "34",
        "currently_streaming": "1",
        "full_streaming_url": "http://www.url.com",
        "url": "http://www.url.com"},
    {
        "label": "A Different Color",
        "value": "A Different Color",
        "currently_streaming": "1",
        "full_streaming_url": "http://www.url.php",
        "url": "http://www.url.com"}]
}​

这是加载它的代码。它返回成功,但我无法从 JSON 对象中获取任何数据:

 $(document).ready(function(){
    $.ajax({
        dataType: 'json',
        beforeSend : function() {
           console.log('Before Ajax Request Starts !!');
        },
        success: function(data) {
            console.log(data);
            alert("Edddddddd");
            $.each(data.films, function(i, object) {
            $.each(object, function(property, value) {
            alert(property + "=" + value);
    });
});
        },
        error : function(jqXHR, textStatus, errorThrown) {
             alert("Error occurred: " + errorThrown);
        },
         beforeSend : function() {
           console.log('Ajax Request Complete  !!');
        },
        url: 'test.php'
    });  
});

非常感谢任何和所有帮助!

更新 我现在正在尝试使用我从这里的每个人那里得到的很好的建议来循环。这就是我现在所拥有的:

    var test="34x25x36";
 $(document).ready(function(){
    $.ajax({
        dataType: 'json',
        beforeSend : function() {
           console.log('Before Ajax Request Starts !!');
        },
        success: function(data) {
            console.log(data);
            alert("Edddddddd");
            $.each(data.films, function(i, object) {
            $.each(object, function(property, value) {
            //alert(property + "=" + value);
            for (i=0; i<data.films.length; i++){
            var theFilm = (data.films[i].value);
            if (theFilm === test){
            document.write("Your movie is hot");
            document.write(theFilm);
            }
            else {
            }
            }
    });
});
        },
        error : function(jqXHR, textStatus, errorThrown) {
             alert("Error occurred: " + errorThrown);
        },
         beforeSend : function() {
           console.log('Ajax Request Complete  !!');
        },
        url: 'test.php'
    });  
});

当我尝试从循环中打印出来时,它似乎可以工作,但我遇到了问题。我最终需要将此数据与一些用户输入进行比较,我在顶部将其定义为 var test 用于测试目的。我希望它比较每个要测试的变量,但由于某种原因,它似乎是在设置要测试的每个变量。我的循环有问题吗?

4

4 回答 4

0

尝试

films[0].label会给你34

要迭代你需要使用

$.each(data.films, function(i, object) { 
// And Not 
$.each(json.films, function(i, object) {

尝试这个

更新代码:

因为 eacy arrach 项目又是一个对象,所以您需要再编写一个循环来访问其中的内容..

$.each(data.films, function() {
    $.each(this, function(j, val) {
        console.log('Key - ' + j + ' :: Value - ' + val);
    });
});​

这应该适用于您的情况

function(data) {
    console.log(data);
    alert("Edddddddd");
    $.each(data.films, function(i, object) {
        $.each(object, function(property, value) {
            alert(property + "=" + value);
        });
    });
}​

// 使用 For 循环

var keys = ["label", "value", "currently_streaming", "full_streaming_url", "url"]
for (i = 0; i < data.films.length; i++) {
    for (j = 0; j < keys.length; j++) {
        alert( 'Key - ' + keys[j] + ' :: Value - ' + data.films[i][keys[j]] )  ;
    }
}​

检查小提琴

于 2012-09-21T18:12:05.970 回答
0

您试图循环json.films而不是data.films ...

于 2012-09-21T18:16:08.017 回答
0

尝试这个:

success: function(data) {
  for (var item in data.films) {
    alert(item.label);
  }
}
于 2012-09-21T18:13:08.547 回答
0
{
    "films": [{  // <-- to access this data.films
        "label": "34",  // to access this data.films[0].label - this is the first object in the array
        "value": "34",  // to access this data.films[0].value
        "currently_streaming": "1", //  // to access this data.films[0].currently_streaming
        "full_streaming_url": "http://www.url.com", // and so on
        "url": "http://www.url.com"} // and so on
    {
        "label": "A Different Color", // to access this data.films[1].label - this is the second object in the array
        // arrays are zero indexed
        "value": "A Different Color", // to access this data.films[1].value
        "currently_streaming": "1",
        "full_streaming_url": "http://www.url.php",
        "url": "http://www.url.com"}]
}​

因此,当您循环时-您想循环数组所在的位置..

$.each(data.films, function(k,v){
    console.log(v.value); // <-- this will give you the value for both
    // now that you're here you can get value for each property by 
    // v.label
    // v.value
    // v.currently_streaming
    // v.full_streaming_url
    // v.url
});

http://jsfiddle.net/KPkWe/

于 2012-09-21T18:52:38.943 回答