2013-04-03 52 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

相关问题