最近在做一个项目时,大量的用到JSON数据格式与服务端进行交互,但是遇到一个问题服务端一修改JSON key , 于是客户端也需要进行修改,如果多个地方使用就要改多处。于是想到是不是有成熟的JSON映射方法,去搜了一下也没有找到合适方法,所以只能自己写了一个jquery 扩展jsonMapping方法,使用是没有问题,但是在效率上是否能提高,记各位多指点。
//extend jquery 'mappingJSON' method
$.extend({
/** "mappingJSON"
* data: need to mapping of the original data
* rule: mapping rule
* container: store mapping after data
**/
mappingJSON: function (data, rule, container) {
for (var i = 0; i < data.length; i++) {
var temp = { };
var item = data[i];
for (var key in item) {
var newKey = rule[key] || key;
if ($.type(item[key]) === "array" && item[key].length > 0) {
temp[newKey] = [];
this.mappingJSON(item[key], rule, temp[newKey]);
} else {
temp[newKey] = item[key];
}
}
container.push(temp);
}
return container;
}
});
考虑到JSON是一个树结构所以运用到递归算法
方法使用:
var rule = { MenuId: "id", MenuName: "name", Url: "menu_url", Children: "children" }; //映射规则 key:服务端字段 value:客户端字段
var d = $.mappingJSON(data, rule, []); 参数1: 映射的数据, 参数2:映射规则, 参数三:临时存放的容器
mappingJSON 方法是一个深度拷贝方法,所以不用担心会改变data的key属性