2011-05-17 21 views
3

我试图从一个Ajax调用.NET Web服务类似于下面的解析JSON结果:提取JSON对象的某些部分产生

function doAjaxCallBack() { 

     $.ajax({ 
      type: "POST", 
      url: "AjaxCallBackService.asmx/GetAllTitles", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 

       // show alert book title and tags to test JSON result 

      }, 

     }); 
} 

这里的JSON结果我从doAjaxCallBack回来:

{"d":[ 
    { 
     "__type":"ASP.NET_Training.Book", 
     "Price":12.3, 
     "Title":"Javascript Programming", 
     "Tag":["Ajax","Javascript"] 
    }, 
    { 
     "__type":"ASP.NET_Training.Book", 
     "Price":14.23, 
     "Title":"Code Complete", 
     "Tag":["Programming","Concept"] 
    } 
]} 

我想获取书名及其标签。我如何循环这种JSON?

谢谢。

回答

3

你取回一个对象,具有一个属性d,它引用对象的数组。

您可以使用jQuery.each()[docs]方法遍历该数组,并从数组中的每个对象中选择标题和标记属性。

$.each(msg.d, function(i, val) { 
    console.log(val.Title); 
    $.each(val.Tag, function(i, val) { 
     console.log("Tag: " + val); 
    }); 
}); 

活生生的例子:http://jsfiddle.net/emSXt/3/(打开控制台)

+0

乍一看,我还以为这只会给我第一个对象,因为标签都有自己的JSON数据也。我正在考虑写两个循环。外层循环遍历这些对象。内循环遍历每个对象元素的属性。但是你的解决方案很好。但为什么只有一个循环呢?因为我也需要一个分离的标签。也许我的问题还不够清楚。对于那个很抱歉。仍然,你有我的投票。 – Narazana 2011-05-17 20:04:29

+0

@Narazana:是的,我不知道你想用标签数组做什么。只需以同样的方式做另一个循环。我会更新。 – user113716 2011-05-17 20:08:29

2
$.each(msg.d, function(i, value) { 
console.log(value.Title); 
if($.isArray(value.Tag)) { 
    $.each(value.Tag, function(j, value1) { 
     console.log(value1); 
    }); 
}else { 
    console.log(value.Tag); 
} 
}); 

这里有一个小提琴http://jsfiddle.net/ATBNx/

1
for(var ib in msg.d) { 
    alert(msg.d[ib].Title); 
    for(var it in msg.d[ib].Tag) { 
    alert(msg.d[ib].Tag[it]); 
    }  
} 
+0

在JavaScript中,最好不要在阵列上使用“for-in”。 – user113716 2011-05-17 19:45:18

+0

@ patrick-dw是对的。 'for-in'实际上会迭代像'length'这样的数组属性。它不建议使用for-in作为数组.. – 2011-05-17 19:54:20

+0

我不知道。多谢你们 – Julien 2011-05-17 19:56:02