ลบองค์ประกอบ json


111

ฉันต้องการลบองค์ประกอบ JSON หรือหนึ่งแถวทั้งหมดออกจาก JSON

ฉันมีสตริง JSON ต่อไปนี้:

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

1
ฉันคิดว่าคุณยังคงมีข้อผิดพลาด json อยู่
Santosh Linkha

3
อาจซ้ำกันของการลบแอตทริบิวต์ JSON
ChrisF

1
ฉันตอบคำถามคุณอาจต้องการดู ฉันเพิ่มคำตอบเพราะหลายคนไม่ได้คำนึงถึงวิธีการเก็บขยะ
Games Brainiac

@ChrisF - ไม่ซ้ำกันเนื่องจากการลบจะสร้างรายการ "ไม่ได้กำหนด" ในอาร์เรย์
mplungjan

คำตอบ:


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

คุณสามารถใช้Spliceเพื่อลบองค์ประกอบออกจากอาร์เรย์


5
ทำไมคำตอบที่แย่ที่สุดมักจะอยู่ด้านบน? มันอาจจะเป็นจุดตัวแทนหรือไม่? ฉันค้นหา. ฉันพบ. คุณมีคำตอบที่ถูกต้อง
Eric Leroy

1
ฉันไม่ได้รับคำตอบนี้ "foo" อยู่ที่ไหนในข้อมูลการทดสอบ
Tony

9
ข้อมูลการทดสอบอยู่ที่ไหน บรรทัดแรกคือรหัสเทียมจริงๆ แทนที่จะเป็น json = {... } มันจะเป็น json = {foo: 'value'}
aharris88

5
ลบ json [คีย์]; เหรอ? ในตัวอย่างที่ระบุมี "FirstName" กี่ตัว คำตอบที่ไม่ถูกต้อง.
EGurelli

4
การใช้การลบจะทำให้องค์ประกอบว่างในอาร์เรย์
MikeL

21

ห้ามมีเครื่องหมายจุลภาคต่อท้ายใน JSON ของคุณ

UPDATE : คุณต้องใช้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];

อย่างไรก็ตามเพื่อให้เข้าใจถึงผลกระทบบางประการของการใช้การลบโปรดดูที่นี่


7

ฉันแนะนำ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
Splice ควรเป็นคำตอบที่ยอมรับการลบแทนที่เอกสาร json ด้วยการแทรก NULL .... ฉันต้องการลบเพื่อลบมัน - จะทำการต่อกัน
Andy

6
  1. แก้ไขข้อผิดพลาดใน JSON: http://jsonlint.com/
  2. แยกวิเคราะห์ JSON (เนื่องจากคุณติดแท็กคำถามด้วย JavaScript ให้ใช้json2.js )
  3. ลบคุณสมบัติจากวัตถุที่คุณสร้างขึ้น
  4. สตริงวัตถุกลับไปเป็น JSON

Drat - คุณตอบในขณะที่ฉันกำลังลบเครื่องหมายจุลภาค :(
mplungjan

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);  

ความหมาย: ลบ 1 รายการที่ตำแหน่ง 3 (เนื่องจากอาร์เรย์นับเป็นรูปแบบ 0 ดังนั้นรายการที่ 3 จะถูกนับเป็นไม่ใช่ 2)


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" จากอาร์เรย์เราสามารถใช้ฟังก์ชั่นแผนที่พร้อมกับลบตามที่กล่าวไว้ข้างต้น

   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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.