2012-01-21 25 views
5

Trong Java, nếu tôi sử dụng chuỗi JSON sau đây làm ví dụ, làm cách nào để kiểm tra xem các đối tượng là rỗng/null?Cách kiểm tra xem đối tượng JSON có rỗng trong Java không?

{"null_object_1" : [], "null_object_2" : [null] } 

Tôi đã cố gắng sử dụng:

if(!jsonSource.isNull("null_object_1")) {/*null_object_1 is not empty/null*/} 
if(!jsonSource.isNull("null_object_2")) {/*null_object_2 is not empty/null*/} 

Nhưng IF báo cáo này vẫn trở thành sự thật (như thể chúng là không rỗng/null).

Có ai có giải pháp không?

Chỉnh sửa: Bởi "đối tượng", tôi thực sự có nghĩa là array.

Trả lời

10

Cả hai điều này là null; chúng là mảng. Kết quả là chính xác những gì bạn mong đợi.

Một trong các mảng của bạn trống, phần còn lại chứa một phần tử là null.

Nếu bạn muốn biết một mảng có trống không, bạn cần lấy mảng, sau đó kiểm tra độ dài của nó.

JSONObject myJsonObject = 
    new JSONObject("{\"null_object_1\":[],\"null_object_2\":[null]}"); 

if (myJsonObject.getJSONArray("null_object_1").length() == 0) { 
    ... 
} 

Chỉnh sửa để làm rõ: Một mảng không có yếu tố (trống) và một mảng có một yếu tố đó là nullđiều hoàn toàn khác nhau. Trong trường hợp mảng thứ hai của bạn, nó không phải là null cũng không trống. Như tôi đã đề cập, nó là một mảng có một phần tử đơn lẻ là null. Nếu bạn là thú vị trong việc xác định nếu đó là trường hợp, bạn sẽ cần phải nhận được mảng sau đó iterate qua nó thử nghiệm mỗi yếu tố để xem nếu nó là null và hành động theo kết quả cho phù hợp.

+0

Cảm ơn bạn đã làm rõ null của Java (: Tôi quá quen với việc làm việc với PHP (nơi kiểm tra null thường đi cho cả trống và rỗng) – 92Jacko

+0

Rất vui vì tôi có thể giúp. Thành thật mà nói, IMHO tôi sẽ tránh sử dụng 'null' Vì lý do này, trong Java 'null' có nghĩa đặc biệt không tương đương với' 0' hoặc "trống" - nó chỉ có thể được gán cho các biến tham chiếu đối tượng và cho biết biến không có tham chiếu đối tượng được gán cho nó. –

2

Theo tài liệu này JSONObject API, isNull kiểm tra giá trị NULL, điều này không đúng trong trường hợp của bạn.

Nếu giá trị 'null_object_1' là String, bạn cần sử dụng chuỗi temp = getString("keyName") và kiểm tra

!("".equals(temp)); 
Các vấn đề liên quan