2012-03-22 42 views
11

Tôi nhận chuỗi JSON từ trang web. Tôi có dữ liệu mà trông như thế này (JSON Mảng)Cách kiểm tra xem đối tượng đã cho là đối tượng hoặc Mảng trong chuỗi JSON

myconf= {URL:[blah,blah]} 

nhưng một số lần dữ liệu này có thể được (JSON đối tượng)

myconf= {URL:{try}} 

cũng nó thể để trống

myconf= {}  

Tôi muốn để thực hiện các hoạt động khác nhau khi đối tượng của nó và khác nhau khi một mảng của nó. Cho đến bây giờ trong mã của tôi tôi đã cố gắng để xem xét chỉ mảng vì vậy tôi nhận được ngoại lệ sau đây. Nhưng tôi không thể kiểm tra đối tượng hoặc mảng.

Tôi nhận được ngoại lệ sau đây

org.json.JSONException: JSONObject["URL"] is not a JSONArray. 

bất cứ ai có thể đề xuất như thế nào nó có thể được cố định. Ở đây tôi biết rằng các đối tượng và mảng là các cá thể của đối tượng JSON. Nhưng tôi không thể tìm thấy một chức năng mà tôi có thể kiểm tra xem các trường hợp nhất định là một mảng hoặc đối tượng.

Tôi đã cố gắng sử dụng này nếu điều kiện nhưng không thành công

if (myconf.length() == 0 ||myconf.has("URL")!=true||myconf.getJSONArray("URL").length()==0) 

Trả lời

23

Đối tượng JSON và mảng là trường hợp tương ứng là JSONObjectJSONArray. Thêm vào đó thực tế là JSONObject có một phương thức get sẽ trả về cho bạn một đối tượng, bạn có thể kiểm tra loại của chính mình mà không cần lo lắng về ClassCastExceptions, và có ya.

if (!json.isNull("URL")) 
{ 
    // Note, not `getJSONArray` or any of that. 
    // This will give us whatever's at "URL", regardless of its type. 
    Object item = json.get("URL"); 

    // `instanceof` tells us whether the object can be cast to a specific type 
    if (item instanceof JSONArray) 
    { 
     // it's an array 
     JSONArray urlArray = (JSONArray) item; 
     // do all kinds of JSONArray'ish things with urlArray 
    } 
    else 
    { 
     // if you know it's either an array or an object, then it's an object 
     JSONObject urlObject = (JSONObject) item; 
     // do objecty stuff with urlObject 
    } 
} 
else 
{ 
    // URL is null/undefined 
    // oh noes 
} 
+0

Cảm ơn. Tôi đã chỉnh sửa câu hỏi của tôi có thể nó sẽ làm cho cảm giác hơn những gì tôi đang tự hỏi về. Bạn có thể đưa ra ví dụ cho nếu (mục instanceof JSONArray). Tôi nên đặt gì nếu điều kiện? – Judy

+0

Đó là * ví dụ. Toán tử 'instanceof' sẽ cho bạn biết nếu' item' là một 'JSONArray'. Chờ chút, hãy nói một chút. – cHao

+0

Cảm ơn Chao. Trên thực tế nó đã làm việc. Nhưng chuỗi cũng có thể rỗng. Vì vậy, tôi nhận được lỗi cho điều đó. if (! myconf.isNull ("URL") || (myconf.getJSONArray ("URL")! = null) || myconf.getJSONArray ("URL"). length()> 0) {Object item = myconf.get ("URL"); // mã khác} Tôi nhận được JSONObject ngoại lệ ["URL"] không tìm thấy. – Judy

5

Khá một vài cách khác nhau.

Tùy chọn này ít được đề xuất hơn nếu bạn quan tâm đến các vấn đề về tài nguyên hệ thống/lạm dụng ngoại lệ Java để xác định mảng hoặc đối tượng.

try{ 
// codes to get JSON object 
} catch (JSONException e){ 
// codes to get JSON array 
} 

Hoặc

này được khuyến khích.

if (json instanceof Array) { 
    // get JSON array 
} else { 
    // get JSON object 
} 
+0

Cảm ơn, tôi biết làm thế nào để loại bỏ trường hợp ngoại lệ. Tôi lo ngại về việc kiểm tra nội dung của đối tượng và kiểm tra xem URL có phải là mảng hay đối tượng hay không. – Judy

+0

Vâng, nếu bạn nhấn một ngoại lệ cố gắng để có được một đối tượng khi nó là một mảng JSON, thì bạn cung cấp việc thực hiện để có được một mảng trong mệnh đề catch. Đây là một cách mặc dù không được khuyến khích. –

+0

Thực ra tôi đang tìm một hàm có thể được sử dụng trong điều kiện nếu kiểm tra. – Judy

0

Sử dụng @Chắc chắn tôi có thể giải quyết được sự cố của mình. Cách khác chúng ta cũng có thể kiểm tra điều này.

Đây là phản ứng của tôi Json

{ 
    "message": "Club Details.", 
    "data": { 
    "main": [ 
     { 
     "id": "47", 
     "name": "Pizza", 

     } 
    ], 

    "description": "description not found", 
    "open_timings": "timings not found", 
    "services": [ 
     { 
     "id": "1", 
     "name": "Free Parking", 
     "icon": "http:\/\/hoppyclub.com\/uploads\/services\/ic_free_parking.png" 
     } 
    ] 
    } 
} 

Bây giờ bạn có thể kiểm tra như thế này mà đối tượng là JSONObject hoặc JSONArray trong phản ứng.

String response = "above is my reponse"; 

    if (response != null && constant.isJSONValid(response)) 
    { 
     JSONObject jsonObject = new JSONObject(response); 

     JSONObject dataJson = jsonObject.getJSONObject("data"); 

     Object description = dataJson.get("description"); 

     if (description instanceof String) 
     { 
      Log.e(TAG, "Description is JSONObject..........."); 
     } 
     else 
     { 
      Log.e(TAG, "Description is JSONArray..........."); 
     } 
    } 

này được sử dụng để kiểm tra đã nhận được json là hợp lệ hay không

public boolean isJSONValid(String test) { 
     try { 
      new JSONObject(test); 
     } catch (JSONException ex) { 
      // e.g. in case JSONArray is valid as well... 
      try { 
       new JSONArray(test); 
      } catch (JSONException ex1) { 
       return false; 
      } 
     } 
     return true; 
    } 
Các vấn đề liên quan