我是json的新手,我很难弄清楚如何编写我的脚本,以便我可以使用数据表显示它
我的json数据看起来像这样
{ "success": true,
"data": {
"events": {
"My Event Name": {
"date": "january 1, 2017",
"place": "My Home",
"participants": ["Merly", "Sonia"],
"ideas": {
"this is an idea": {
"idea_detail": {
"deets": ["1.00", "1.00"]
},
"last_update": 1517977880
},
"another idea": {
"idea_detail": {
"deets": ["1.02", "12.00"]
},
"last_update": 1517977882
}
},
"info": {
"display_name": "Display",
"num": 2,
"date": 1517977921
}
},
}
}
}
经过研究,这就是我想出的:
$(document).ready( function() {
$('#example').DataTable({
'ajax' : {
"type" : "POST",
"url" : "<?php echo get_template_directory_uri();?>/trial.txt",
"dataSrc": function (json) {
var return_data = new Array();
var events = new Array();
var events = $.map(json.data.events, function(value, index) {
return value;
});
for(var i=0;i < events; i++){
return_data.push({
'event': json.data.events[i],
'date': json.data.events[i].date,
'place': json.data.events[i].place,
'participants': json.data.events[i].participants,
'ideas': json.data.events[i].ideas,
'detail': json.data.events[i].ideas[i].idea_detail[i],
'last_update': json.data.events[i].ideas.last_update,
'info': json.data.events[i].info
})
}
return return_data;
}
},
"columns" : [
{'data': 'event'},
{'data': 'date'},
{'data': 'place'},
{'data': 'participants'},
{'data': 'ideas'},
{'data': 'detail'},
{'data': 'last_update'},
{'data': 'info'} ]
})
} );
我可能正在做所有这些错误,我希望有人可以激励我朝着正确的方向前进。提前谢谢你
答案 0 :(得分:0)
Datatables需要一个对象数组,看起来你正在尝试构建它们。我的第一个问题是你能让服务器代码以正确的格式返回数据吗?对于Datatables无需修改即可使用它,您需要将其格式化为:
{ "success": true,
"data": {
"events": [
{ "event": "My Event Name",
"date": "january 1, 2017",
"place": "My Home",
"participants": ["Merly", "Sonia"],
"ideas": {
"this is an idea": {
"idea_detail": {
"deets": ["1.00", "1.00"]
},
"last_update": 1517977880
},
"another idea": {
"idea_detail": {
"deets": ["1.02", "12.00"]
},
"last_update": 1517977882
}
},
"info": {
"display_name": "Display",
"num": 2,
"date": 1517977921
}
},
.....next record.....
]
}
}
使用此结构,您只需将ajax.dataSrc设置为:dataSrc: "data.events"
。您所要做的就是担心如何显示ideas
。
根据您的要求,ideas
对象似乎是Row Details的合适人选。当用户想要查看时,您可以动态解析该对象。
但是,我认为目前您当前问题的根源是:
for(var i=0;i < events; i++){
我想你想要这个:
for(var i=0;i < events.length; i++){
下一个区域是:
'ideas': json.data.events[i].ideas,
'detail': json.data.events[i].ideas[i].idea_detail[i],
您需要一个单独的for循环来处理每个ideas
到您要显示的结构中。 .ideas[i].idea_detail[i]
将为您提供数组索引错误,因为i
并未实际循环遍历对象的这些部分。
我建议暂时忽略ideas
部分,然后只显示基本数据。一旦你得到了,我们就可以讨论ideas
。需要知道您希望如何显示它,我们可以帮助您适当地解析它。