删除json元素


111

我想从JSON中删除JSON元素或整行。

我有以下JSON字符串:

{
   "result":[
       {
           "FirstName": "Test1",
           "LastName":  "User",
       },
       {
           "FirstName": "user",
           "LastName":  "user",
       },
       {
           "FirstName": "Ropbert",
           "LastName":  "Jones",
       },
       {
           "FirstName": "hitesh",
           "LastName":  "prajapti",
       }
   ]
}

1
我觉得你还是有一些JSON错误
桑托斯Linkha


1
我回答了这个问题,您可能想看看它。我添加了答案,因为许多人没有考虑垃圾回收的工作方式。
Games Brainiac

@ChrisF-不是重复的,因为delete将在数组中创建一个“未定义”的项目
mplungjan

Answers:


188
var json = { ... };
var key = "foo";
delete json[key]; // Removes json.foo from the dictionary.

您可以使用splice从数组中删除元素。


5
为什么总是最差的答案排在最前面?可能是代表点吗?我搜索了。我发现。您的回答正确。
埃里克·莱罗伊

1
我没有得到这个答案。测试数据中的“ foo”在哪里?
托尼

9
测试数据中的foo在哪里?好吧,第一行实际上是伪代码。而不是json = {...},而是类似json = {foo:'value'}
aharris88 2014年

5
删除json [key]; ?给定示例中有多少个“名字”?错误的答案。
EGurelli '16

3
使用delete将在数组中保留一个空元素
MikeL

21

JSON中没有尾部逗号

更新:如果要从对象中的数组中删除项目,则需要使用array.splice而不是删除

var data = {
  "result": [{
    "FirstName": "Test1",
    "LastName": "User"
  }, {
    "FirstName": "user",
    "LastName": "user"
  }]
}
console.log(data.result);
console.log("------------ deleting -------------");
delete data.result[1];
console.log(data.result); // note the "undefined" in the array.


data = {
  "result": [{
    "FirstName": "Test1",
    "LastName": "User"
  }, {
    "FirstName": "user",
    "LastName": "user"
  }]
}

console.log(data.result);
console.log("------------ slicing -------------");
var deletedItem = data.result.splice(1,1);
console.log(data.result); // here no problem with undefined.


15

您可以尝试删除JSON,如下所示:

var bleh = {first: '1', second: '2', third:'3'}

alert(bleh.first);

delete bleh.first;

alert(bleh.first);

另外,您也可以传入索引以删除属性:

delete bleh[1];

但是,要了解使用删除的一些影响,请在此处查看



6

如@mplungjan所述,我虽然是正确的。然后,我立即单击“上速率”按钮。但是遵循它,我终于得到了一个错误。

<script>
var data = {"result":[
  {"FirstName":"Test1","LastName":"User","Email":"test@test.com","City":"ahmedabad","State":"sk","Country":"canada","Status":"False","iUserID":"23"},
  {"FirstName":"user","LastName":"user","Email":"u@u.com","City":"ahmedabad","State":"Gujarat","Country":"India","Status":"True","iUserID":"41"},
  {"FirstName":"Ropbert","LastName":"Jones","Email":"Robert@gmail.com","City":"NewYork","State":"gfg","Country":"fgdfgdfg","Status":"True","iUserID":"48"},
  {"FirstName":"hitesh","LastName":"prajapti","Email":"h.prajapati@zzz.com","City":"","State":"","Country":"","Status":"True","iUserID":"78"}
  ]
}
alert(data.result)
delete data.result[3]
alert(data.result)
</script>

删除只是删除数据,但是“位置”仍然存在,但未定义

我做到了,它就像一个魅力:

data.result.splice(2,1);  

含义:删除位置3处的1个项目(因为数组从0开始计数,因此编号3的项目被视为2)。


6

我建议splice从JSON对象数组中删除对象的方法。

jQuery(json).each(function (index){
        if(json[index].FirstName == "Test1"){
            json.splice(index,1); // This will remove the object that first name equals to Test1
            return false; // This will stop the execution of jQuery each loop.
        }
});

我之所以使用它,是因为当我使用delete方法时,我得到的null对象是JSON.stringify(json)


1
拼接应该是可接受的答案,删除用NULL插入替换json文档...。我想删除以删除它-拼接将。
安迪

5

请尝试以下

var myJSONObject ={"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
console.log(myJSONObject);
console.log(myJSONObject.ircEvent);
delete myJSONObject.ircEvent 
delete myJSONObject.regex 
console.log(myJSONObject);

5

所有的答案都很好,它也可以满足您的要求,但是我相信删除此错误的最佳方法以及垃圾收集器的最佳方法(如果正在运行node.js)是这样的:

var json = { <your_imported_json_here> };
var key = "somekey";
json[key] = null;
delete json[key];

这样,垃圾收集器node.js将知道json['somekey']不再需要该垃圾收集器并将其删除。


我也读过关于这样做的信息,但是我无法使它正常工作。它仍然留下空引用
K20GH


0

如果我们要从数组中删除一个属性,例如“ firstName”,则可以使用map函数以及上述的delete方法

   var result= [
       {
           "FirstName": "Test1",
           "LastName":  "User",
       },
       {
           "FirstName": "user",
           "LastName":  "user",
       },
       {
           "FirstName": "Ropbert",
           "LastName":  "Jones",
       },
       {
           "FirstName": "hitesh",
           "LastName":  "prajapti",
       }
   ]

result.map( el=>{
    delete el["FirstName"]
})
console.log("OUT",result)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.