如何解码JSON对象并对其进行迭代
How to decode JSON object and iterate over it?
在这篇文章中,我学习了如何在服务器端对对象进行编码,现在我想在客户端对其进行解码。
在客户端,我做
$.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的Data::Dumper
输出)
$VAR1 = {
'127' => {
'owners' => [
'm'
],
'users' => [
'hh',
'do'
],
'date_end' => '24/05-2011',
'title' => 'dfg',
'date_begin' => '24/05-2011',
'members_groups' => [],
'type' => 'individuel'
},
'276' => {
...
问题
obj
确实包含解码的JSON吗?我如何迭代对象?
因为指定了dataType: 'json'
,所以result
应该已经包含了从HTTP响应中未序列化的Javascript对象。$.parseJSON
应该是不必要的。
您可以使用$.each
:循环浏览它
success: function(result){
if (result.error) {
showError(result.error);
} else {
$.each(result, function(key, value) {
alert(value.title).
});
}
}
result
已经是一个JSON对象-由于您已经指定了dataType: "json"
,所以jQuery会解析它-所以您不应该解析它。
要查看数据,您可以这样做:
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...
}
更新
我一直忘了关于$.each()
的问题,正如lononey的回答所示——你可能想改为使用它。
您可以使用for...in
迭代obj的成员。
for(var key in obj) {
var value = obj[key];
alert(key + "=" + value);
}
注意:应该没有什么理由需要对JSON对象的成员进行迭代。JSON是一种序列化格式,双方(客户端和服务器)都知道它的结构。如果您能帮助传输什么数据,obj应该是一个位于其最外部范围的数组。
您必须将AJAX请求的数据类型声明为JSON。jQuery将自动对其进行"解码",并从中创建一个对象
您可以立即通过alert( result[127] );
访问数据
相关文章:
- 如何在DataTables 2.1中迭代对象数组
- 基于使用angular在下拉列表中选择的对象,迭代对象内部的对象
- 为什么数组在对象内部迭代对象时存储重复值
- 为什么我不能用for Each迭代对象
- 为什么字符串在 ES2015 中是可迭代对象
- 如何通过迭代对象数组来删除某些项目
- 在不同数据选项之间循环迭代对象
- 延迟迭代对象
- 在 es6 中迭代对象并返回新对象
- Javascript:如何迭代对象[Key:value],但跳过一些键([最快的方法])
- 如何使用Meteor.js中的Template辅助对象迭代对象中的两个数组
- JavaScript如何在内部迭代对象键
- 如何迭代对象/数组中的项,并构建嵌套的JSON
- 创建一个生成器来迭代对象属性排列
- 使用map迭代对象数组
- 使用 for 循环,如何迭代对象以向其添加 id 属性
- 用于迭代对象的 for 循环
- 在角度ng重复中迭代对象的数组
- 如何在 Javascript 中迭代对象数组
- 迭代对象内部的对象