2013-04-03 77 views
1

即時通訊嘗試從具有mongodb作爲其數據庫和配置項的站點獲取數據,我使用簡單的腳本將json編碼爲網站輸出,輸出如下:Android:無法從多維MongoDB轉換爲JSONArray jsonObject

{ 
    "mko680": { 
     "_id": { 
     "$id": "515be1807bfb8b1d0d000000" 
     }, 
     "channel": [ 
        "channel a", 
        "subchannel a" 
        ], 
     "channel_id": 227, 
     "id": "mko680", 
    }, 
    "mkv002": { 
     "_id": { 
     "$id": "515b32407bfb8b1d0d000000" 
      }, 
     "channel": [ 
       "channel a", 
       "subchannel b" 
        ], 
     "channel_id": 232, 
     "id": "mkv002", 
    } 
} 

我嘗試解析輸出在我的Android項目這樣

JSONArray obj = new JSONArray(outputlike o); 
for (int i = 0; i < obj.length(); i++) { 
    JSONObject json_data = obj.getJSONObject(i); 
    Log.i("test",json_data.getString("channel_id")); 
} 

的logcat的說org.JSON.Mismatch

任何線索的是JSON /我的代碼不正確?

感謝,並索裏對我不好的問題希望你能理解

更新:

現在我將其更改爲JSON對象,如:

JSONObject arr = new JSONObject(bufstring); 
for (int i = 0; i < arr.length(); i++) { 
Log.i("test",arr.getString("channel_id")); 
} 

但logcat的現在說,不值爲channel_id,但它確定在該輸出中有channel_id,有任何線索?

回答

2

您收到的數據類型JSONObject,而不是JSONArray的。因此,你需要分析你這樣的JSON數據: -

String jsonStr = "..."; //Your JSONString 
JSONObject obj = new JSONObject(jsonStr); 
JSONObject mkObj = obj.getJSONObject("mko680"); 
String channelId = mkObj.getString("channel_id"); 
+0

謝謝,是的,我已經做了這樣的事情,但我想從所有mko680,mkv002和其他我所不知道的所有數據知道_id是什麼,循環時有什麼辦法呢? – Abdullah

+0

如果你已經制作好了你的JSON,然後把我的代碼片段放在while循環中,它就可以工作。 – SudoRahul

+0

這裏是我完整的JSON http://tny.cz/72d02fc2,你可以發佈循環代碼,我試試看,它只顯示第一個(mko680)其他沒有 – Abdullah

1

您的退貨數據爲Jsonobject而非JsonArray

所以,你可以創建JsonObject

JSONObject obj = new JSONObject(outputlike o); 
+0

感謝@rajeshwaran,第一個問題是解決了,但現在還有另一個,請參閱更新的第一篇文章 – Abdullah

+0

請發佈您的完整json。 – rajeshwaran

+0

這是http://tny.cz/72d02fc2 – Abdullah

0

感謝所有基於你的答案我已經想通了,起初我有很難得到動態密鑰用於獲取合適的對象,我使用下面的代碼要解決它,不認爲其良好的一個,但我用這個臨時

JSONObject arr = new JSONObject(bufstring); 
Iterator keys = arr.keys(); 
while(keys.hasNext()) { 
    String ambilKey = (String)keys.next(); 
    JSONObject AmbilObject = arr.getJSONObject(ambilKey); 
    Log.i("test",AmbilObject.toString()); 
} 

感謝所有的建議中,你是岩石:d

相關問題