JSON 对象属性名转换
发布于 11 年前 作者 sdfcbs91 18886 次预览 最后一次回复是 7 年前 来自
工作中,写了个有意思的函数: self.upper.dataSourceTypes = JSON.parse(msg); //加载 库类型 //数据属性转换 var dataTypes = changeJsonName({changeName:{“TypeName”:“name”,“TypeID”:“id”},objs:self.upper.dataSourceTypes}); 把对象中的"TypeName",“TypeID” 改成 name",“id” //欢迎有兴趣的朋友指正优化!!! /* *JSON 属性名转换 *参数形式:{changeName:{a:A,b:B},objs:obj} => 例子: {changeName:{“id”:“KEY”},objs:[{id:2},{id:4}]} id为2的JSON对象(数组)改变成[{KEY:2,KEY:4}] *changeName要修改的对象属性名=>{a:A,b:B},objs该对象/对象数组 */ function changeJsonName(o){ var newObj = []; if(o.hasOwnProperty(“changeName”)){ if(o.hasOwnProperty(“objs”)){ var cloneStr = JSON.stringify(o.objs); var cloneObj = JSON.parse(cloneStr); var doit = function(obj){
if(obj.constructor == Array){
for(var i=0;i<obj.length;i++){
doit(obj[i]);
}
}else{
//循环该对象的属性
for(var i in obj){
//循环要改变的属性名
for(var x in o.changeName){
//如果名称相同
if(x == i){
obj[o.changeName[x]] = obj[i];
delete obj[i];
}
}
}
}
}
doit(cloneObj);
return cloneObj;
}
}
return false;
}
//欢迎有兴趣的朋友指正优化!!!
8 回复
代码高亮重新编辑一下吧…… 最好给个使用前、使用后的示例
引用 ravenwang的数据 {‘a’: 1, ‘b’: 2, ‘c’: 3} 需要转换成 {‘A’: 1, ‘B’: 2, ‘c’: 3} 那么 就是 a=>A,b=>B,c不用变 changeJsonName({ changeName:{“a”:“A”,“b”:“B”}, objs:{‘a’: 1, ‘b’: 2, ‘c’: 3} });
写这么神奇的函数干啥:( 用来做数据重构么?
如果json结构很复杂,你的函数估计就没用鸟:)
在某些时候会用到,比如匹配在一个公用插件用的数据结构… 主要觉着有意思
我写的
changeKeyNames是一个实现同样功能的函数…