json文件:{"posts":[{"post":{"news_id":"2","news_title":"\u82f1\u7279\u5c14\u65b0\u95fb\u5217\u8868","news_content":"\u82f1\u7279\u5c14\u65b0\u95fb\u5185\u5bb9(Inter..)","news_time":"2012-07-13 11:08:09"}},{"post":{"news_id":"3","news_title":"\u82f1\u7279\u5c14\u65b0\u95fb\u5217\u8868","news_content":"\u82f1\u7279\u5c14\u65b0\u95fb\u5185\u5bb9(Inter..)","news_time":"2012-07-13 11:08:25"}},{"post":{"news_id":"4","news_title":"\u82f1\u7279\u5c14\u65b0\u95fb\u5217\u8868","news_content":"\u82f1\u7279\u5c14\u65b0\u95fb\u5185\u5bb9(Inter..)","news_time":"2012-07-13 11:15:57"}}]}
解析json代码:
/*
 * 读取和解析json数据存到jsonarray中
 */
private void refreshList() {
String url = HttpUtil.BASE_URL;
String jsonStr = HttpUtil.queryStringForPost(url);
try {
JSONObject dataObj = new JSONObject(jsonStr).getJSONObject("posts");
array = dataObj.getJSONArray("post");
if (array != null && array.length() > 0) {
TOTAL_PAGE++;
for (int i = 0; i < array.length(); i++) {
list.add(array.optJSONObject(i));
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}报的错误
at posts of type org.json.JSONArray cannot be converted to JSONObject
07-17 00:57:07.034: W/System.err(351):  at org.json.JSON.typeMismatch(JSON.java:96)
07-17 00:57:07.034: W/System.err(351):  at org.json.JSONObject.getJSONObject(JSONObject.java:573)
07-17 00:57:07.034: W/System.err(351):  at com.dscm.NewsListActivity.refreshList(NewsListActivity.java:198)
07-17 00:57:07.044: W/System.err(351):  at com.dscm.NewsListActivity.access$11(NewsListActivity.java:194)
07-17 00:57:07.044: W/System.err(351):  at com.dscm.NewsListActivity$GetHomeTimeLineThread.run(NewsListActivity.java:254)
07-17 00:57:07.044: W/System.err(351):  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
07-17 00:57:07.044: W/System.err(351):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-17 00:57:07.044: W/System.err(351):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-17 00:57:07.054: W/System.err(351):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
07-17 00:57:07.054: W/System.err(351):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
07-17 00:57:07.064: W/System.err(351):  at java.lang.Thread.run(Thread.java:1096)

解决方案 »

  1.   

    JSONArray dataarr = new JSONObject(jsonStr).getJSONArray("posts");key posts对应的已经是一个array了,
    后面就可以根据 JSONArray 的长度去读取了
      

  2.   

    手工解析是不行的,需要使用JSON.jar之类的第三方包进行解析
      

  3.   

    JSONArray cannot be converted to JSONObject  提示很清晰!!jsonarray 不能转换成jsonobject
      

  4.   


    public class JsonUtil {
    private static final String TAG = "JsonUtil";
    private String result = "{\"posts\":[{\"post\":{\"news_id\":\"2\",\"news_title\":\"\u82f1\u7279\u5c14\u65b0\u95fb\u5217\u8868\",\"news_content\":\"\u82f1\u7279\u5c14\u65b0\u95fb\u5185\u5bb9(Inter..)\",\"news_time\":\"2012-07-13 11:08:09\"}},{\"post\":{\"news_id\":\"3\",\"news_title\":\"\u82f1\u7279\u5c14\u65b0\u95fb\u5217\u8868\",\"news_content\":\"\u82f1\u7279\u5c14\u65b0\u95fb\u5185\u5bb9(Inter..)\",\"news_time\":\"2012-07-13 11:08:25\"}},{\"post\":{\"news_id\":\"4\",\"news_title\":\"\u82f1\u7279\u5c14\u65b0\u95fb\u5217\u8868\",\"news_content\":\"\u82f1\u7279\u5c14\u65b0\u95fb\u5185\u5bb9(Inter..)\",\"news_time\":\"2012-07-13 11:15:57\"}}]}";

    public void parseJson(){
    JSONArray jsonArray;
    try {
    JSONObject jsonObject = new JSONObject(result);
    String json_str = jsonObject.getString("posts");
    jsonArray = new JSONArray(json_str);
    for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject jb = jsonArray.getJSONObject(i);
    Log.i(TAG, jb.getString("post"));
    JSONObject post = jb.getJSONObject("post");

    Log.i(TAG,post.getString("news_id"));
    Log.i(TAG,post.getString("news_title"));
    Log.i(TAG,post.getString("news_content"));
    Log.i(TAG,post.getString("news_time"));
    }
    } catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }直接代码了