【问题标题】:Remove JSON element移除 JSON 元素
【发布时间】:2011-07-15 16:22:38
【问题描述】:

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

我有以下 JSON 字符串:

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

【问题讨论】:

  • 我认为你仍然有一些 json 错误
  • Remove a JSON attribute 的可能重复项
  • 我回答了这个问题,你可能想看看它。我添加了答案,因为很多人没有考虑垃圾收集的工作原理。
  • @ChrisF - 不是重复的,因为删除会在数组中创建一个“未定义”项

标签: javascript json


【解决方案1】:
var json = { ... };
var key = "foo";
delete json[key]; // Removes json.foo from the dictionary.

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

【讨论】:

  • 为什么最差的答案总是排在最前面?这可能是代表点吗?我搜索过。我发现。你答对了。
  • 我没有得到这个答案。测试数据中的“foo”在哪里?
  • 测试数据中的 foo 在哪里?好吧,第一行实际上是伪代码。不是 json = {...},而是 json = {foo: 'value'}
  • 删除 json[key]; ?给定示例中有多少个“名字”?答案错误。
  • 使用 delete 将在数组中留下一个空元素
【解决方案2】:

在您的 OBJECT 中不要有尾随逗号(JSON 是一种字符串表示法)

更新:如果要从对象中的数组中删除项目,则需要使用array.splice 而不是 delete。或者在删除后过滤未定义的数组

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.

【讨论】:

    【解决方案3】:

    您可以尝试如下删除JSON:

    var bleh = {first: '1', second: '2', third:'3'}
    
    alert(bleh.first);
    
    delete bleh.first;
    
    alert(bleh.first);
    

    另外,你也可以传入索引来删除一个属性:

    delete bleh[1];
    

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

    【讨论】:

      【解决方案4】:

      我推荐 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 方法时,我在使用JSON.stringify(json) 之后得到null 对象

      【讨论】:

      • Splice 应该是公认的答案,delete 将 json 文档替换为 NULL 插入......我想 delete 删除它 - splice 会。
      【解决方案5】:

      对于那些来这里寻找如何根据对象值从 JSON 数组中删除对象的人:

      let users = [{"name": "Ben"},{"name": "Tim"},{"name": "Harry"}];
      
       for (let [i, user] of users.entries()) {
          if (user.name == "Tim") {
              users.splice(i, 1);
          }
       }

      用户 Tim 现已从 JSON 数组 users 中删除。

      【讨论】:

      • 赞成,但如果用户列表中有多个 Tim,则会失败。您需要向后循环以避免在删除步骤期间弄乱数组索引。
      • 我同意@TawabWakil 好点:)
      【解决方案6】:

      所有的答案都很好,它也会按照你的要求做,但我相信删除它的最佳方法,以及垃圾收集器(如果你正在运行 node.js)的最佳方法是这样的:

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

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

      【讨论】:

      • 我也读过关于这样做的信息,但我无法让它工作。它仍然留下空引用
      【解决方案7】:
      1. 修复 JSON 中的错误:http://jsonlint.com/
      2. 解析 JSON(由于您已使用 JavaScript 标记问题,请使用 json2.js
      3. Delete 您创建的对象的属性
      4. 将对象字符串化回 JSON。

      【讨论】:

      • Drat - 你在我删除逗号时回答了:(
      【解决方案8】:

      正如@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个)

      【讨论】:

        【解决方案9】:

        试试下面这个

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

        【讨论】:

          【解决方案10】:

          如果我们想从数组中删除一个属性,比如“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)
          

          【讨论】:

            【解决方案11】:

            试试这个

            json = $.grep(newcurrPayment.paymentTypeInsert, function (el, idx) { return el.FirstName == "Test1" }, true)
            

            【讨论】:

              猜你喜欢
              • 2021-12-01
              • 2013-02-07
              • 2013-04-22
              • 1970-01-01
              • 1970-01-01
              • 2012-02-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多