2017-10-06 67 views
0

我在Google和Google上搜索了很多关于如何从我的JSON对象中删除元素的东西。Javascript如何添加和删除2级深度的JSON元素

这是我简化的JSON来说明我的要求。

包:

{ 
    "resourceType": "Bundle", 
    "meta": { 
     "lastUpdated": "2017-10-06T04:42:22.411Z" 
    }, 
    "type": "searchset", 
    "total": "0", 
    "entry": [ 
     { 
      "_id": "59d5739e668e9e3fd29aeb0d", 
      "resource": { 
       "id": "59d5739e668e9e3fd29aeb0d" 
      }, 
      "__v": 0 
     }, 
     { 
      "_id": "59d6a3fae4b45d50c5ffd4f7", 
      "resource": { 
       "id": "59d6a3fae4b45d50c5ffd4f7" 
      }, 
      "__v": 0 
     }, 
     { 
      "_id": "59d6a831e4b45d50c5ffd4fa", 
      "resource": { 
       "id": "59d6a831e4b45d50c5ffd4fa" 
      }, 
      "__v": 0 
     } 
    ] 
} 

如何删除所有entry._id和入门.__ V' 我试过这些,但没有工作。

delete bundle.meta; <-- meta is on level 1, it works. 
delete bundle.entry._id; <-- not working. The _id under entry 
delete bundle.__v; <-- not working. The __v is also under entry 

我如何在每个条目下添加了新的元素,如“全名”,如下

我想要的结果 - 删除“_id”和“__v”,然后添加“全名”的条目[ ]:

{ 
    "resourceType": "Bundle", 
    "meta": { 
     "lastUpdated": "2017-10-06T04:42:22.411Z" 
    }, 
    "type": "searchset", 
    "total": "0", 
    "entry": [ 
     { 
      "fullname": "Apple", 
      "resource": { 
       "id": "59d5739e668e9e3fd29aeb0d", 
      } 
     }, 
     { 
      "fullname": "Orange", 
      "resource": { 
       "id": "59d6a3fae4b45d50c5ffd4f7" 
      }, 
     }, ...... 

我已经尝试了很多方法并搜索了很多。谢谢您的帮助!


感谢Vivek的回答。有用。

for (var i = 0; i < bundle.entry.length; i++) { 
    delete bundle.entry[i]._id; 
    delete bundle.entry[i].__v; 
    bundle.entry[i].fullname = "Test"; 
} 
+0

_“我希望的结果 - 删除 '_id' 和 '__v',然后添加“FUL lname'到条目[]“_”全名“属性值如何确定? – guest271314

+0

您无法从[JSON对象](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON)中移除元素... – Teemu

+0

嗨guest271314,让我们来说说条目[i] .fullname =条目[i] .resource.id的最后4位;谢谢您的帮助。 – Autorun

回答

1

请尝试以下代码,测试,它可以帮助你。

var object1 = { 
    "resourceType": "Bundle", 
    "meta": { 
     "lastUpdated": "2017-10-06T04:42:22.411Z" 
    }, 
    "type": "searchset", 
    "total": "0", 
    "entry": [ 
     { 
      "_id": "59d5739e668e9e3fd29aeb0d", 
      "resource": { 
       "id": "59d5739e668e9e3fd29aeb0d", 
      }, 
      "__v": 0 
     }, 
     { 
      "_id": "59d6a3fae4b45d50c5ffd4f7", 
      "resource": { 
       "id": "59d6a3fae4b45d50c5ffd4f7" 
      }, 
      "__v": 0 
     }, 
     { 
      "_id": "59d6a831e4b45d50c5ffd4fa", 
      "resource": { 
       "id": "59d6a831e4b45d50c5ffd4fa" 
      }, 
      "__v": 0 
     } 
    ] 
    }; 

    var array1=['Apple','Orange','Gava'] 

    function a(){ 
     for(var i=0;i<object1.entry.length;i++){ 
      delete object1.entry[i]._id; 
      delete object1.entry[i].__v; 
      object1.entry[i].fullname = array1[i]; 
     } 
     console.log(object); 
    } 

如果您觉得有帮助,标记会有帮助。

+0

感谢您的简单答案。有用。 – Autorun

1

bundle.entry是一个数组。 :)
删除第一个元素的_id:
delete bundle.entry[0]._id
删除_id和__v所有元素:
bundle.entry = bundle.entry.map(function(entry){ var newEntry = { resource: entry.resource, fullname: "fullname here" }; return newEntry; });

+0

这将在每个条目中添加相同的“全名”。不想要的 – Prasanna

1
const fullNameList = ['Apple', 'Orange', 'Guava'] 
delete bundle.meta 
bundle.entry = bundle.entry.map((item, index) => { 
    const {__v, _id, ...restObj } = item; 
    restObj.fullname = fullNameList[index] 
    return restObj; 
}) 

记住,fullNameList的长度和bundle.entry的长度必须相同

1

您可以使用地图功能和从对象中删除键,而在同一个函数添加键,如下图所示:

var data = { 
 
    "resourceType": "Bundle", 
 
    "meta": { 
 
     "lastUpdated": "2017-10-06T04:42:22.411Z" 
 
    }, 
 
    "type": "searchset", 
 
    "total": "0", 
 
    "entry": [ 
 
     { 
 
      "_id": "59d5739e668e9e3fd29aeb0d", 
 
      "resource": { 
 
       "id": "59d5739e668e9e3fd29aeb0d" 
 
      }, 
 
      "__v": 0 
 
     }, 
 
     { 
 
      "_id": "59d6a3fae4b45d50c5ffd4f7", 
 
      "resource": { 
 
       "id": "59d6a3fae4b45d50c5ffd4f7" 
 
      }, 
 
      "__v": 0 
 
     }, 
 
     { 
 
      "_id": "59d6a831e4b45d50c5ffd4fa", 
 
      "resource": { 
 
       "id": "59d6a831e4b45d50c5ffd4fa" 
 
      }, 
 
      "__v": 0 
 
     } 
 
    ] 
 
} 
 
var names = ['A','B','C']; 
 
var counter = 0; 
 
data.entry = data.entry.map(function(obj){ 
 
    delete obj['_id'] 
 
    delete obj['__v'] 
 
    obj.fullname = names[counter] 
 
    counter++ ; 
 
    return obj 
 
}); 
 

 
console.log(data);

+0

感谢约瑟夫这个想法。 – Autorun