如何以声明式方式用嵌套JSON填充DataTable并展示指定传感器数据
解决方案:用DataTables声明式方式实现需求
当然可以用DataTables的声明式方式搞定,不需要提前用JS修改API返回的数据!你之前的代码只显示单个传感器,是因为没把数据源定位到正确的位置。
核心思路
DataTables默认会把API返回的data数组当成表格的行数据源,但你需要的是data数组第一个元素里的sensors数组作为行数据,所以只要通过ajax配置里的dataSrc指定正确的数据源路径就行。
方法1:简洁的字符串式dataSrc(纯声明式)
直接用点语法指定数据源路径,最符合你的需求:
$('#dataTable').DataTable({ ajax: { url: 'myapiurl', // 直接定位到data[0]下的sensors数组 dataSrc: 'data.0.sensors' }, columns: [ { data: "description" }, // 对应每个传感器的description字段 { data: "value" } // 对应每个传感器的value字段 ] });
方法2:自定义函数式dataSrc(更灵活)
如果之后需要做额外的数据处理,也可以用函数来返回数据源:
$('#dataTable').DataTable({ ajax: { url: 'myapiurl', dataSrc: function(response) { // 提取data数组第一个元素的sensors作为表格行数据 return response.data[0].sensors; } }, columns: [ { data: "description" }, { data: "value" } ] });
为什么之前的代码不行?
你之前的写法"data": "sensors.0.description"是告诉DataTables:遍历data数组里的每一个元素(也就是每一条timestamp记录),然后取该元素下sensors数组的第一个元素的description。这就导致表格只会显示两条行(对应两个timestamp),每行都是第一个传感器的数据,完全不符合你的需求。
而通过dataSrc把数据源切换成data[0].sensors后,DataTables会直接遍历这个传感器数组,把每个传感器对象渲染成一行,正好就是你要的展示效果:
- Second Sensor | 6.0
- My Default Sensor | 8.0
内容的提问来源于stack exchange,提问作者Yannic Hamann
相关产品推荐
相关产品推荐

