Xóa phần tử json


111

Tôi muốn xóa phần tử JSON hoặc toàn bộ một hàng khỏi JSON.

Tôi có chuỗi JSON sau:

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

1
tôi nghĩ rằng bạn vẫn gặp một số lỗi json
Santosh Linkha

3
bản sao có thể có của Xóa thuộc tính JSON
ChrisF

1
Tôi đã trả lời câu hỏi, bạn có thể muốn xem qua. Tôi đã thêm câu trả lời bởi vì nhiều người không xem xét cách thức hoạt động của việc thu gom rác.
Trò chơi Brainiac vào

@ChrisF - không phải là một bản sao từ xóa sẽ tạo một mục "không xác định" trong mảng
mplungjan

Câu trả lời:


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

Bạn có thể sử dụng mối nối để xóa các phần tử khỏi một mảng.


5
Tại sao những câu trả lời tệ nhất luôn ở trên cùng? Nó có thể là điểm đại diện? Tôi đã tìm kiếm. Tôi đã tìm thấy. Bạn đã có câu trả lời chính xác.
Eric Leroy

1
Tôi không nhận được câu trả lời này. "Foo" ở đâu trong dữ liệu thử nghiệm?
Tony

9
Foo ở đâu trong dữ liệu thử nghiệm? Vâng, dòng đầu tiên thực sự là mã giả. Thay vì json = {...}, nó sẽ là json = {foo: 'value'}
aharris88 Ngày

5
xóa json [key]; ? Có bao nhiêu "FirstName" trong ví dụ nhất định? Câu trả lời sai.
EGurelli

3
sử dụng xóa sẽ để lại một yếu tố null trong mảng
Mikel

21

KHÔNG có dấu phẩy ở cuối trong JSON của bạn

CẬP NHẬT : bạn cần sử dụng array.splice và không xóa nếu bạn muốn xóa các mục khỏi mảng trong đối tượng

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

Bạn có thể thử xóa JSON như sau:

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

alert(bleh.first);

delete bleh.first;

alert(bleh.first);

Ngoài ra, bạn cũng có thể chuyển vào chỉ mục để xóa một thuộc tính:

delete bleh[1];

Tuy nhiên, để hiểu một số hậu quả của việc sử dụng tính năng xóa, hãy xem tại đây


6
  1. Sửa lỗi trong JSON: http://jsonlint.com/
  2. Phân tích cú pháp JSON (vì bạn đã gắn thẻ câu hỏi bằng JavaScript, hãy sử dụng json2.js )
  3. Xóa thuộc tính khỏi đối tượng bạn đã tạo
  4. Chuỗi đối tượng trở lại JSON.

Drat - bạn đã trả lời trong khi tôi đã được gỡ bỏ dấu phẩy :(
mplungjan

6

Theo mô tả của @mplungjan, tôi mặc dù nó đã đúng. Sau đó ngay lập tức tôi nhấp vào nút tăng tỷ lệ. Nhưng bằng cách làm theo nó, cuối cùng tôi đã nhận được lỗi.

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

Xóa chỉ là xóa dữ liệu, nhưng 'địa điểm' vẫn ở đó như không xác định .

Tôi đã làm điều này và nó hoạt động như một sự quyến rũ:

data.result.splice(2,1);  

nghĩa là: xóa 1 mục ở vị trí 3 (vì mảng được tính ở dạng 0, sau đó mục ở số 3 được tính là không có 2)


6

Tôi đề xuất splicephương pháp xóa một đối tượng khỏi mảng đối tượng 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.
        }
});

Tôi sử dụng điều này vì khi tôi sử dụng deletephương thức, tôi nhận được nullđối tượng sau khiJSON.stringify(json)


1
Splice phải là câu trả lời được chấp nhận, xóa thay thế tài liệu json bằng chèn NULL .... Tôi muốn xóa để xóa nó - splice sẽ.
Andy

5

Hãy thử điều này sau đây

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

Tất cả các câu trả lời đều tuyệt vời và nó cũng sẽ thực hiện những gì bạn yêu cầu, nhưng tôi tin rằng cách tốt nhất để xóa điều này và cách tốt nhất cho trình thu gom rác (nếu bạn đang chạy node.js) là như sau:

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

Bằng cách này, trình thu gom rác node.jssẽ biết rằng json['somekey']không cần thiết nữa và sẽ xóa nó.


Tôi cũng đã đọc về cách làm theo cách này, nhưng tôi không thể làm cho cách này hoạt động. Nó vẫn rời liệu tham khảo null
K20GH

0

thử cái này

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

0

nếu chúng ta muốn xóa một thuộc tính, nói "firstName" khỏi mảng, chúng ta có thể sử dụng hàm bản đồ cùng với xóa như đã đề cập ở trên

   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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.