首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android json 解析 异常

2012-08-03 
android json 解析 错误json文件:{posts:[{post:{news_id:2,news_title:\u82f1\u7279\u5c14\u6

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
[解决办法]

Java code
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();        }    }} 

热点排行