android json 解析 错误
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)
[解决办法]
JSONArray dataarr = new JSONObject(jsonStr).getJSONArray("posts");
key posts对应的已经是一个array了,
后面就可以根据 JSONArray 的长度去读取了
[解决办法]
用Gson试试
[解决办法]
手工解析是不行的,需要使用JSON.jar之类的第三方包进行解析
[解决办法]
JSONArray cannot be converted to JSONObject 提示很清晰!!jsonarray 不能转换成jsonobject
[解决办法]
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(); } }}