介绍
本篇文章和大家了解一下替换json对象中的关键的解决方案。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
json (JavaScript对象表示法,JS对象简谱)是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
看到标题你可能会想,如此简单的问题值得去探究吗?如果我有一个json对象,只需下面简单的几行代码就可以完成:
var obj =, { ,,,“_id":,“5078 c3a803ff4197dc81fbfb" ,,,“email":,“user1@gmail.com" ,,,“image":,“some_image_url" ,,,“name":,“Name 1“; }; var new_key =,“id"; var old_key =,“_id"; obj [new_key],=, obj [old_key]; delete obj [old_key];
是的,没错!以上代码可以很好地完成工作,从而将obj对象中的“_id"替换成“id"。
在大多数情况下,这种方式不会带来什么问题,但是,如果你需要将obj对象序列化到文档中并比较差异,你就会看到问题。
//,修改之前的obj { ,,,“_id":,“5078 c3a803ff4197dc81fbfb" ,,,“email":,“user1@gmail.com" ,,,“image":,“some_image_url" ,,,“name":,“Name 1“; }//,修改之后的obj //,JSON.stringify (obj, null,,“\ t") { ,,,“email":,“user1@gmail.com" ,,,“image":,“some_image_url" ,,,“name":,“Name 1“, ,,,“id":,“5078 c3a803ff4197dc81fbfb" }
新添加的关键默认放在了最后,并且由于在替换过程中我们删除了之前的关键,所以导致序列化之后的obj与之前的obj存在较大的差异。
那如何才能保证在最小差异的情况下实现关键的替换呢?下面是我找到的一些方法:
Object.prototype.renameProperty =, function (oldName,新名称),{ ,,,,//,Do nothing if 从而names 断开连接,从而相同 ,,,,if (oldName ===,新名称),{ ,,,,,,,,return ; ,,,,} ,,,//,Check for 从而old property name 用avoid a ReferenceError 拷贝strict 模式。 ,,,if (this.hasOwnProperty (oldName)), { ,,,,,,,这(新名称),=,这(oldName); ,,,,,,,delete 这[oldName]; ,,,} ,,,return ; };
function renameKeys (obj, newkey), { const 才能;keyValues =,种(obj) . map (key =祝辞,{ ,,,const newKey =, newkey(例子),| |,关键; ,,,return {, [newKey]: obj(例子),}; ,,}); return 才能Object.assign ({},…keyvalue); } const obj =,{,答:“1“,,b:,“2“,}; const newKeys =,{,答:“A",, c:,“C",}; const renamedObj =, renameKeys (obj, newkey); console.log (renamedObj);//,{答:“1“,,b:“2“}
//,使用lodash的_.mapKeys()函数 var user =, { ,,名字:“Andrew", id:才能,25岁, 报道:才能,假的 }; var renamed =, _.mapKeys(用户,函数(值,键),{ return 才能;key  +,“_", +, user.id; }); console.log(重命名);
var str =, JSON.stringify(对象); 时间=str str.replace (/oldKey/g, & # 39; newkey # 39;); 时间=str str.replace (/oldKey2/g, & # 39; newKey2& # 39;); object =, JSON.parse (str);
function renameObjectKey (oldObj, oldName,,新名称),{ ,,,const newObj =, {}; ,,,种(oldObj) .forEach (key =祝辞,{ ,,,,,,,const value =, oldObj(例子); ,,,,,,,if (key ===, oldName), { ,,,,,,,,,,,newObj(新名称),=,价值; ,,,,,,,},{else ,,,,,,,,,,,newObj(例子),=,价值; ,,,,,,,} ,,,}); ,,,return newObj; null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null替换json对象中的关键的解决方案