JavaScript后端数据重组为JSON数组的正确与错误方式
本文分析在JavaScript中将后端返回的扁平数组转换为特定结构的JSON数组的方法。通过对比错误使用JSON.stringify导致字段加引号的问题,展示了正确的对象构建逻辑,并提供了处理host相同记录相邻数据的完整代码示例及在线工具推荐。
后端数据重组为JSON数组的方法
本文介绍了一种在JavaScript中构造JSON数组的具体方法,供读者参考学习。
假设从后端获取的数据是一个数组,其中每个元素包含如下字段(相同host的记录在数组中相邻排列):
currentTime:"1470729601" host:"10.3.34.21" taskList:null taskNum:1
我们的目标是将上述数据重组为如下结构的JSON数组:
[{
name: 'host:10.1.6.49',
data: [
[1470641461000, 5],
[1470642581000, 4],
[1470643701000, 2],
[1470647341000, 3]
]
}, {
name: 'host:10.3.34.18',
data: [
[1470641461000, 2],
[1470642581000, 2],
[1470643701000, 1],
[1470647341000, 4]
]
}, {
name: 'host:10.2.2.22',
data: [
[1470641461000, 3],
[1470642581000, 2],
[1470643701000, 6],
[1470647341000, 4]
]
},{
name: 'host:10.1.110.96',
data: [
[1470641461000, 1],
[1470642581000, 8],
[1470643701000, 1],
[1470647341000, 1]
]
},{
name: 'host:10.2.2.87',
data: [
[1470641461000, 7],
[1470642581000, 3],
[1470643701000, 6],
[1470647341000, 5]
]
}]
错误的数据转换方式
一种常见的错误处理方式如下:
var backendData = data.result;
var resultList = new Array();
var curHost = "";
var oneHostDataList = new Array();
for (var i in backendData) {
var host = backendData[i].host;
if (host != curHost) {
if(i != 0) {
var item = new Object();
item.name = curHost;
item.data = oneHostDataList;
resultList.push(item);
}
oneHostDataList = new Array();
curHost = host;
}
else {
var dot = new Array();
dot.push(backendData[i].currentTime * 1000);
dot.push(backendData[i].taskNum);
oneHostDataList.push(dot);
}
}
var item = new Object();
item.name = curHost;
item.data = oneHostDataList;
resultList.push(item);
$scope.data = JSON.stringify(resultList);
正确的JSON数组构造实现
上述错误方式的问题在于,直接转换后name和host字段会被加上引号,导致数据类型不符合预期。正确的构造方式如下所示:
var backendData = data.result;
var resultList = [];
var curHost = "";
var oneHostDataList = new Array();
for (var i in backendData) {
var host = backendData[i].host;
if (host != curHost) {
if(i != 0) {
var item = {
name: curHost,
data: oneHostDataList
};
resultList.push(item);
}
oneHostDataList = new Array();
curHost = host;
}
else {
var dot = new Array();
dot.push(backendData[i].currentTime * 1000);
dot.push(backendData[i].taskNum);
oneHostDataList.push(dot);
}
}
var item = new Object();
item.name = curHost;
item.data = oneHostDataList;
resultList.push(item);
$scope.data = resultList;
此外,推荐以下相关JSON在线工具供参考使用:
在线JSON代码检验、校验、美化、格式化工具: http://tools.jb51.net/code/json
JSON在线格式化工具: http://tools.jb51.net/code/jsonformat
在线XML/JSON互相转换工具: http://tools.jb51.net/code/xmljson
json代码在线格式化/美化/压缩/编辑/转换工具: http://tools.jb51.net/code/jsoncodeformat
在线json压缩/转义工具: http://tools.jb51.net/code/json_yasuo_trans
更多关于JavaScript相关内容可查看本站专题:《JavaScript中json操作技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述的JavaScript程序设计内容对大家有所帮助。
JS处理含Emoji或中文的字符串转数组乱码问题
2026-11-05 16:12:28
JS怎么使用展开运算符合并对象
2026-11-05 14:42:18
ES6+环境下判断JS对象为空的简洁写法
2026-11-05 12:12:23
怎么通过replacer函数自定义JS中JSON的格式化输出
2026-11-05 11:19:44
JS正则表达式基础:字面量与RegExp构造函数的区别及常用元字符
2026-11-05 11:16:58
