1

我试图从以 mongodb 作为数据库和 CI 的站点获取数据,我制作了简单的脚本来使站点的 json 编码输出,输出如下:

   {
   "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,有什么线索吗?

4

3 回答 3

2

您收到的数据是 typeJSONObject而不是JSONArray. 因此,您需要像这样解析您的 json 数据:-

String jsonStr = "..."; //Your JSONString
JSONObject obj = new JSONObject(jsonStr);
JSONObject mkObj = obj.getJSONObject("mko680");
String channelId = mkObj.getString("channel_id");
于 2013-04-03T08:29:09.323 回答
1

您的返回数据Jsonobject不是JsonArray.

所以,你可以创建JsonObject

JSONObject obj = new JSONObject(outputlike o);
于 2013-04-03T08:23:38.553 回答
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

于 2013-04-04T02:37:04.087 回答