鍍金池/ 問答/C#  HTML/ 動態(tài)對象轉(zhuǎn)換成指定 Json 格式的問題

動態(tài)對象轉(zhuǎn)換成指定 Json 格式的問題

問題描述

在使用以下代碼獲取動態(tài)對象并轉(zhuǎn)換成 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);

發(fā)現(xiàn)轉(zhuǎn)換的 Json 格式(如下格式一)并不是我需要的格式:

{
    "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
}

我實際需要轉(zhuǎn)換成如下格式(格式二),用于 JQuery DataTables 插件的數(shù)據(jù)源:

[{
    "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
}]

你期待的結(jié)果是什么?

請教一下如何轉(zhuǎn)換成格式二,或者如何將格式一的數(shù)據(jù)用于 DataTables 的數(shù)據(jù)源??

注意我這是動態(tài)生成的匿名對象,預(yù)先不知道會有哪些列,無法顯式初始化列,需要動態(tài)生成類似格式二的 Json,然后用類似以下 JS 初始化 DataTables

$('#example').dataTable({
            "data": dataObject[0].DATA,
            "columns": dataObject[0].COLUMNS
        });
回答
編輯回答
伐木累

格式一轉(zhuǎn)化為格式二:

let data = {
  "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
}

function trans(source) {
  let columns = []
  let data = []
  let keys = []
  source.data.forEach((cur, i) => {
    if (i === 0) {
      keys = Object.keys(cur)
      columns = keys.map(key => ({title: key}))
    }
    data.push(keys.map(key => cur[key]))
  })
  return [{
    COLUMNS: columns,
    DATA: data,
    draw: source.draw
  }]
}
trans(data)
2018年1月30日 21:34