2012-11-28 26 views
55

Làm cách nào để bạn đặt giá trị thành rỗng bằng org.json.JSONObject trong java? Tôi chắc chắn có thể đọc nếu một giá trị là null bằng cách sử dụng IsNull - nhưng nó có vẻ như khi tôi đặt null, nó chỉ bỏ qua cho tôi:Làm cách nào để bạn đặt giá trị thành rỗng bằng org.json.JSONObject trong java?

JSONObject o = new JSONObject(); 
o.put("key",null); 
o.isNull("key"); // returns true, buuuut... 
o.has("key"); // returns false 
o.isNull("somethingIHaventSetAtAll"); // also returns true, unfortunately 
+6

Nếu bạn đặt không thì nó sẽ xóa khóa: http://www.json.org/javadoc/org/json/JSONObject.html#put(java.lang.String,%20java.lang.Object) –

Trả lời

136

Cố gắng thiết lập JSONObject.NULL thay vì null:

Một sentinel giá trị được sử dụng để xác định rõ ràng tên không có giá trị. Không giống như null, tên với giá trị này:

  • hiển thị trong tên() mảng
  • hiển thị trong các phím() iterator
  • trở lại đúng với có (String)
  • không ném vào get (String)
  • được bao gồm trong chuỗi JSON được mã hóa.

Giá trị này vi phạm hợp đồng chung bằng (Đối tượng) bằng cách trả về giá trị đúng khi so với giá trị rỗng. Phương thức toString() của nó trả về "null".

+1

Hoạt động như một sự quyến rũ! Cảm ơn! –

+0

bạn có thể cung cấp ví dụ tại sao nó vi phạm hợp đồng không? – voipp

+0

@voipp Nó vi phạm quy tắc (từ 'Object.equals'): *" Đối với bất kỳ giá trị tham chiếu không null 'x',' x.equals (null) 'sẽ trả về false" *. –

Các vấn đề liên quan