如何正确转换json的数据表

时间:2018-02-09 05:48:38

标签: jquery arrays json object datatables

我是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'}  ]
})

} );
我可能正在做所有这些错误,我希望有人可以激励我朝着正确的方向前进。提前谢谢你

1 个答案:

答案 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。需要知道您希望如何显示它,我们可以帮助您适当地解析它。