2012-05-15 37 views
15

Tôi có JSON tập tin như sau đó phải được đổ vào một ArrayList:Kiểm tra nếu một JSON Object đặc biệt là có sẵn hay không

{ 
"main1" : [ 
    { 
    "child1" : valueA, 
    "child2" : valueB, 
    "child3" : valueC, 
    }, 
    { 
    "child1" : value1, 
    "child3" : value3, 
    }, 
], 
"main2" : "valueMain2" 
} 

Yếu tố child2 phải được kiểm tra nếu nó tồn tại hay không và sau đó giá trị được lấy. Bạn có thể thấy rằng nó không xuất hiện trong mảng thứ hai.

Tôi đang sử dụng JSON Native (org.JSON) Java Code là dưới đây:

ArrayList<HashMap<String,String>> myList = new ArrayList<HashMap<String,String>>(); 
JSONObject json = <my_json_object>; 

JSONObject getchild2; 

JSONArray jArray = <my_json_object>.getJSONArray("main1"); 
for(int j = 0; j < jArray.length(), j++){ 
    HashMap<String,String> map = new HashMap<String,String>(); 

    map.put("First Value", jArray.getJSONObject(j).getString("child1")); 
    map.put("Third Value", jArray.getJSONObject(j).getString("child3")); 

    getchild2 = jArray.getJSONObject(j).getJSONObject("child2"); 
    if(getchild2 == null){ 
    map.put("Second Value", "Some Dummy Value"); 
    } else { 
    map.put("Second Value", jArray.getJSONObject(j).getString("child2")); 
    } 
myList.add(map); 
} 

Làm thế nào tôi có thể đạt được điều này?

<my_json_object> sử dụng có nguồn gốc Parsing URL như tôi nhận Phản hồi HTTP của một yêu cầu URL tìm thấy ở đây: http://mobisys.in/blog/2012/01/parsing-json-from-url-in-android/

Nó không làm việc như là lỗi dưới đây:

E/AndroidRuntime(664): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
+1

Vui lòng dán mã và lỗi của bạn nếu bạn nhận được bất kỳ – UVM

+0

Bạn có thể vui lòng dán mã java, cách bạn chuyển đổi json thành đối tượng json không? – pavi

+0

Đã thêm mã !! Làm ơn hãy kiểm tra và báo cho tôi. – curlyreggie

Trả lời

37

Dù sao, tôi có những giải pháp với một số Googling: tôi lại đóng khung nó như là,

if (!jArray.getJSONObject(j).has("child2")) { 
    map.put("Second Value", "N.A"); 
} else { 
    map.put("Second Value", jArray.getJSONObject(j).getString("child2")); 
} 

Tạo JSONObject getchild2 = jArray.getJSONObject (j) .getJSONObject ("child2"); đúng hơn là không cần thiết.

Và công trình này, khá hoàn hảo! Hãy tham khảo tài liệu này để biết thêm chi tiết: Checking if exists subObject in JSON

Cảm ơn mọi người đã trợ giúp!

+1

tôi muốn kiểm tra bất kỳ giá trị đối tượng json perticular tồn tại hay không? như ở đây {"ValidateUserResult": [{"Sys_User_ID": 69, "my_id": 23}]} tôi muốn kiểm tra phản hồi chuỗi "my_id" có sẵn hay không? bất kỳ ai có ý tưởng về nó? – CoDe

+0

Mở rộng điều tương tự như tôi đã đưa ra giải pháp. Nên đủ tốt. – curlyreggie

+0

Tôi có tệp JSON sau: http://pagesbyz.com/test.json và tôi đang gặp sự cố tương tự. Đây là câu hỏi của tôi: http://stackoverflow.com/questions/19868439/how-to-put-json-information-in-an-array-to-use-it-for-displaying-in-listview (Nếu có một mục nhập trống, tệp JSON không được phân tích cú pháp nữa: /) Tôi thực sự đánh giá cao sự trợ giúp của bạn. – Si8

-2

Hãy thử điều này:

{"main1" : [{ 
      "id":"1" 
       "child1" : "valueA", 
       "child2" : "valueB", 
       "child3" : "valueC", 
      }, { 
       "id":"2" 
        "child1" : "value1", 
       "child3" : "value3", 
      }] 
} 
10
getJSONObject("child2"); 

Sẽ ném ngoại lệ nếu child2 không tồn tại. Hãy thử điều này thay vì:

getchild2 = jArray.getJSONObject(j).optJSONObject("child2"); 

Bằng cách đó bạn không cần phải bắt một ngoại lệ nếu child2 không tồn tại và thay vào đó có thể kiểm tra null.

+0

Đẹp! Điều này làm việc. Cảm ơn!! – curlyreggie

+0

Nhưng tôi có vấn đề. Làm thế nào để có được giá trị 'valueB' nếu đối tượng tồn tại? Tôi đã thử sử dụng cùng một mã. Không thể có được nó. – curlyreggie

+0

Bây giờ tôi đã dán lại nó, 'JSONObject getchild2 = jArray.getJSONObject (j) .optJSONObject (" child2 "); nếu (getchild2 == null) { map.put ("rating", "N.A"); } else { map.put ("rating", jArray.getJSONObject (j) .getString ("child2")); } ' Thực tế là kết quả sẽ trả về giá trị nhưng không trả lại. Luôn luôn trỏ đến "N.A" là kết quả. Tôi đang làm gì sai? – curlyreggie

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