2014-12-13 290 views
0

我得到JSON響應,檢測並移除JSONArray空響應

{"image_data": [ 
[ 
    { 
    "post_id": "331", 
    "meta_key": "_wp_attached_file", 
    "meta_value": "2014/09/443025.jpg" 
    } 
], 
[ 
    { 
    "post_id": "364", 
    "meta_key": "_wp_attached_file", 
    "meta_value": "2014/09/632026.jpg" 
    } 
], 
[ 
    { 
    "post_id": "657", 
    "meta_key": "_wp_attached_file", 
    "meta_value": "2014/10/233506.jpg" 
    } 
], 
[ 
    { 
    "post_id": "727", 
    "meta_key": "_wp_attached_file", 
    "meta_value": "2014/10/653413.jpg" 
    } 
], 
"null", 
"null", 
[ 
    { 
    "post_id": "958", 
    "meta_key": "_wp_attached_file", 
    "meta_value": "2014/10/801582.jpg" 
    } 
    ] 
    ] 
    } 

問題是我得到錯誤,因爲空值類型不匹配。在給定的json響應中有三個空值。我必須檢測這個空值並忽略該值。我試過

JSONArray imageDataArray = response.getJSONArray("image_data"); 
    for (int j = 0; j < imageDataArray.length(); j++) { 
           // ad image data 
           if ((imageDataArray.getJSONArray(j)) == null) { 
            continue; 
           }else{ 
            JSONArray adimageData = imageDataArray 
              .getJSONArray(j); 

            //doing my work 
           } 

          } 

但是得到了類型不匹配的錯誤。在logcat中,它說值null不能轉換成jsonarray。我需要的解決方案......請建議我做正確的事

+0

爲什麼不嘗試使用像Jackson這樣的「合適的」json庫? – Hector 2014-12-13 16:56:08

回答

0

我認爲你會做JSON數據一致。 如果你修改你的字符串json刪除「null」,你的json數據將是一致的。 下面是您的數據示例,它可以正常工作。 我已經使用了org.json.simple庫。

jsdata = jsdata.replace("\"null\",",""); 



    try { 
     JSONObject jso = (JSONObject) jsonParser.parse(jsdata); 

     JSONArray jsArray = (JSONArray) jso.get("image_data"); 

     //Iterator<JSONObject> iterator = jsArray.iterator(); 
     Iterator<JSONArray> iterator = jsArray.iterator(); 


     while(iterator.hasNext()) { 
      JSONArray a2 = iterator.next(); 
      Iterator<JSONObject> i2 = a2.iterator(); 

      while(i2.hasNext()){ 
       JSONObject itemObj = i2.next(); 
       String s = (String) itemObj.get("post_id"); 

       Log.i("MYTAG",s); 
      } 



     } 

    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
+0

thnx很多@bogojob – 2014-12-14 06:34:42

0

嘗試修改此行:

if ((imageDataArray.getJSONArray(j)) == null) { 

if ((imageDataArray.isNull(j))) { 

這將檢查JSONArray,看看你索引爲空,因此您不必使用導致錯誤的getJSONArray(index)

+0

Thnx回覆。但得到在 JSONArray adimageData = imageDataArray \t \t \t \t \t \t \t \t \t .getJSONArray(j)的誤差; 這一行。 – 2014-12-13 17:00:31

0

你需要將它轉換爲JSON數組。你不能只檢查

if(imageDataArray.get(i) == null) 

或 如果(imageDataArray.get(I)== 「空」)

來源:http://www.json.org/javadoc/org/json/JSONArray.html][1]

+0

你的代碼看起來很合法。但我不知道爲什麼它得到相同的錯誤! – 2014-12-13 17:24:09