Как использовать JQuery Datatables для отображения анонимных типов?

1

После получения динамического объекта и преобразования его в Json, используя следующий код:

dynamic realTimeData = db.Database.DynamicSqlQuery("exec QueryRealTimeData @treeId", new SqlParameter("@treeId", treeId));

int draw = Request["draw"] != null ? int.Parse(Request["draw"]) : 1;

var jsonDataTemp = new {
  data = realTimeData,
    draw = draw
};

return Json(jsonDataTemp, JsonRequestBehavior.AllowGet);

Было обнаружено, что формат преобразования Json (формат 1 ниже) не соответствует формату, который мне нужен:

{
  "data": [{
    "B01-Rtd": 10.285,
    "001-Rtd": 7.522,
    "011-Rtd": 20.903
  }, {
    "B01-Rtd": 10.031,
    "001-Rtd": 7.518,
    "011-Rtd": 20.903
  }],
  "draw": 1
}

Мне действительно нужно преобразовать в следующий формат (формат 2) для источника данных для JQuery DataTables:

[{
  "COLUMNS": [
    {"title": "B01-Rtd"},
    {"title": "001-Rtd"},
    {"title": "011-Rtd"}
  ],
  "DATA": [
    ["10.285", "7.522", "20.903"],
    ["10.031", "7.518", "20.903"]
  ],
  "draw": 1
}]

Спросите, как преобразовать в формат 2 или как использовать данные формата 1 в источнике данных DataTables?

Заметьте, что это динамически генерируемые анонимные объекты, не знаю заранее, какие столбцы, явно не инициализирующие столбец, должны быть динамически сгенерированы аналогичным двум Json-форматам, а затем использовать аналогичные следующие JS-инициализации DataTables:

$('#example').dataTable({
  "data": dataObject[0].DATA,
  "columns": dataObject[0].COLUMNS
});

Или существуют другие способы отображения анонимных типов с Datatables?

Теги:
asp.net-mvc

1 ответ

0
Лучший ответ

var dataObject = [{
  "data": [{
    "B01-Rtd": 10.285,
    "001-Rtd": 7.522,
    "011-Rtd": 20.903
  }, {
    "B01-Rtd": 10.031,
    "001-Rtd": 7.518,
    "011-Rtd": 20.903
  }],
  "draw": 1
}];

var data = [],
  columns = [];

if (dataObject.length && dataObject[0].data.length) {
  columns = Object.keys(dataObject[0].data[0]).map(x => {
    return {
      title: x
    }
  });
  
  dataObject[0].data.forEach((item, index) => {
    var values = [];
    columns.forEach(x => { 
      values.push(item[x.title]);
    });
    data.push(values);
  });
}
console.log(columns);
console.log(data);

//$('#example').dataTable({
//  "data": data,
//  "columns": columns
//});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню