替换json对象中的关键的解决方案

  介绍

本篇文章和大家了解一下替换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存在较大的差异。

替换json对象中的关键的解决方案

那如何才能保证在最小差异的情况下实现关键的替换呢?下面是我找到的一些方法:

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对象中的关键的解决方案