Javascript 如何解码JSON对象并对其进行迭代?
在本文中,我学习了如何在服务器端对对象进行编码,现在我想在客户端对其进行解码 在客户端,我是这样做的Javascript 如何解码JSON对象并对其进行迭代?,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,在本文中,我学习了如何在服务器端对对象进行编码,现在我想在客户端对其进行解码 在客户端,我是这样做的 $.ajax({ type: "GET", url: "/cgi-bin/ajax_sort.pl", contentType: "application/json; charset=utf-8", dataType: "json", data: { "column" : this.id }, error: function(XMLHttpRe
$.ajax({
type: "GET",
url: "/cgi-bin/ajax_sort.pl",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { "column" : this.id },
error: function(XMLHttpRequest, textStatus, errorThrown) {
showError('responseText: ' + XMLHttpRequest.responseText);
showError('textStatus: ' + textStatus);
showError('errorThrown: ' + errorThrown);
},
success: function(result){
if (result.error) {
showError(result.error);
} else {
var obj = jQuery.parseJSON(result);
}
}
});
问题
obj
现在是否包含解码的JSON数据
如果是这样,则服务器端的对象看起来像这样(从Perl的数据::转储程序输出)
问题
如果obj
确实包含解码的JSON,我如何迭代该对象?result
已经是一个JSON对象-由jQuery解析,因为您指定了数据类型:“JSON”
,所以不应该解析它
要查看数据,可以执行以下操作:
for(key in result){
var curr = result[key];
//iterate over owners
for(var i = 0; i < curr.owners.length; i++){
alert(curr.owners[i]);
}
//iterate over users
for(var i = 0; i < curr.users.length; i++){
alert(curr.users[i]);
}
alert(curr.data_end);
alert(curr.title);
//and so on...
}
for(输入结果){
var curr=结果[键];
//迭代所有者
对于(变量i=0;i
更新
我一直忘记了$。每个()
,如您的答案所示-您可能希望改为使用它。因为您指定了数据类型:“json”
,结果应该已经包含未从HTTP响应序列化的Javascript对象。应该没有必要
您可以通过以下方式循环:
您必须将AJAX请求的数据类型声明为JSON。jQuery将自动“解码”这个,并从中创建一个对象
您可以通过alert(结果[127])立即访问数据代码>您可以使用对obj成员进行迭代
注意:您应该没有什么理由想要迭代JSON对象的成员。JSON是一种序列化格式,其中双方(客户端和服务器)都知道它的结构。如果您可以帮助传输什么数据,obj应该是其最外层范围内的一个数组。Cool!=)如何访问users中的数组元素?如果您在$中。每个回调中,您应该循环使用value.users
,或者使用value.users[0]
获取第一个,等等。我建议您查看和类型的文档,并学习如何处理它们。数据类型非常有趣的一点。您编写的结果将是一个JSON obejct。这与JavaScript对象相同吗?@Sandra JSON是一种基于JavaScript子集的数据格式,并使用JS中的对象文字符号,因此JSON是有效的JS。因此,是的,一旦解析,“JSON”对象实际上就是一个JS对象。我使用术语“JSON对象”表示该对象是通过解析JSON字符串创建的。
for(key in result){
var curr = result[key];
//iterate over owners
for(var i = 0; i < curr.owners.length; i++){
alert(curr.owners[i]);
}
//iterate over users
for(var i = 0; i < curr.users.length; i++){
alert(curr.users[i]);
}
alert(curr.data_end);
alert(curr.title);
//and so on...
}
success: function(result){
if (result.error) {
showError(result.error);
} else {
$.each(result, function(key, value) {
alert(value.title).
});
}
}
for(var key in obj) {
var value = obj[key];
alert(key + "=" + value);
}