如何解析JSON数据 [英] How to parse json data
本文介绍了如何解析JSON数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在使用从网页获取JSON数据非常新,所以我有点困惑在这里。如何让Android的这一JSON数据。我正在使用JSON fromat误差
llike此日志猫。
02-16 21:31:25.093:W / System.err的(22428):org.json.JSONException:值{\"3\":{\"ID\":1172,\"title\":\"dsfsdf\"},\"9\":{\"ID\":1172,\"title\":\"dsfsdf\"},\"8\":{\"ID\":1172,\"title\":\"dsfsdf\"},\"7\":{\"ID\":1172,\"title\":\"dsfsdf\"},\"6\":{\"ID\":1172,\"title\":\"dsfsdf\"},\"5\":{\"ID\":1172,\"title\":\"dsfsdf\"},\"4\":{\"ID\":1172,\"title\":\"dsfsdf\"}}在类型的数据org.json.JSONObject不能转换为JSONArray
02-16 21:31:25.133:W / System.err的(22428):在org.json.JSON.typeMismatch(JSON.java:100)
02-16 21:31:25.138:W / System.err的(22428):在org.json.JSONObject.getJSONArray(JSONObject.java:548)
02-16 21:31:25.138:W / System.err的(22428):在auto.life.dashboard.LeftSideMenuController$MyPickAsyncTask.doInBackground(LeftSideMenuController.java:1807)
02-16 21:31:25.138:W / System.err的(22428):在auto.life.dashboard.LeftSideMenuController$MyPickAsyncTask.doInBackground(LeftSideMenuController.java:1)
02-16 21:31:25.138:W / System.err的(22428):在android.os.AsyncTask $ 2.call(AsyncTask.java:287)
02-16 21:31:25.138:W / System.err的(22428):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)
02-16 21:31:25.138:W / System.err的(22428):在java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-16 21:31:25.138:W / System.err的(22428):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230)
02-16 21:31:25.138:W / System.err的(22428):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-16 21:31:25.138:W / System.err的(22428):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)
02-16 21:31:25.138:W / System.err的(22428):在java.lang.Thread.run(Thread.java:856)
02-16 21:36:26.873:W / IInputConnectionWrapper(22428):getSelectedText上的非活动InputConnection
02-16 21:36:26.873:W / IInputConnectionWrapper(22428)上的非活动InputConnection setComposingText
02-16 21:36:26.873:W / IInputConnectionWrapper(22428):getExtractedText上的非活动InputConnection
我有这样fromat JSON数据。
{
搞定:[],
邮报:{
_event:mydatajson,
USER_ID:12
},
数据:{
3:{
ID:1172
头衔:dsfsdf
},
4:{
ID:1172
头衔:dsfsdf
},
5:{
ID:1172
头衔:dsfsdf
},
6:{
ID:1172
头衔:dsfsdf
},
7:{
ID:1172
头衔:dsfsdf
},
8:{
ID:1172
头衔:dsfsdf
},
9:{
ID:1172
头衔:dsfsdf
}
}
}
我试图从Java数据:
列表<&的NameValuePair GT; mypickDetails =新的ArrayList<&的NameValuePair GT;();
mypickDetails.add(新BasicNameValuePair(_事件,事件)); mypickDetails.add(新BasicNameValuePair(user_ID的用户ID));
HttpClient的HC =新DefaultHttpClient(); HttpPost马力=新HttpPost(HttpPath.url); 尝试{ hp.setEntity(新UrlEn codedFormEntity(mypickDetails)); //执行HTTP POST请求
HTT presponse响应= hc.execute(马力);
字符串结果= EntityUtils.toString(response.getEntity()); 字符串jsontext =新的String(结果);
//根据JSON格式结果,可以采取的对象 JSONObject的条目=新的JSONObject(jsontext); JSONArray postListArray = entries.getJSONArray(数据); 的for(int i = 0; I< postListArray.length();我++){
Log.d(葛亭价值---,+ - + postListArray.length());
JSONObject的postListObj = postListArray.getJSONObject(I) 字符串myPickName = postListObj.getString(标题);
DashboardVariables.mypickname.add(myPickName);
}
感谢您前进。
解决方案
数据:{
数据
不是 JSONArray
。它是一种的JSONObject
。
但你必须
JSONArray postListArray = entries.getJSONArray(数据); //错误
{
重新presents一个JSON对象节点
[
重新presents JSON数组节点
数据:{// JSON对象数据
3:{// json对象3
ID:1172 // INT
头衔:dsfsdf//串
}
使用
的JSONObject JB =(JSONObject的)entries.getJSONObject(数据);
的JSONObject 3 = jb.getJSONObject(3);
INT ID = three.getInt(ID);
字符串title = three.getString(标题);
I am very new in Using Getting JSON data from web, SO I am little confused here. How to get this JSON data in android: I am getting error in json fromat.
llike this in log cat.
02-16 21:31:25.093: W/System.err(22428): org.json.JSONException: Value {"3":{"ID":1172,"title":"dsfsdf"},"9":{"ID":1172,"title":"dsfsdf"},"8":{"ID":1172,"title":"dsfsdf"},"7":{"ID":1172,"title":"dsfsdf"},"6":{"ID":1172,"title":"dsfsdf"},"5":{"ID":1172,"title":"dsfsdf"},"4":{"ID":1172,"title":"dsfsdf"}} at data of type org.json.JSONObject cannot be converted to JSONArray
02-16 21:31:25.133: W/System.err(22428): at org.json.JSON.typeMismatch(JSON.java:100)
02-16 21:31:25.138: W/System.err(22428): at org.json.JSONObject.getJSONArray(JSONObject.java:548)
02-16 21:31:25.138: W/System.err(22428): at auto.life.dashboard.LeftSideMenuController$MyPickAsyncTask.doInBackground(LeftSideMenuController.java:1807)
02-16 21:31:25.138: W/System.err(22428): at auto.life.dashboard.LeftSideMenuController$MyPickAsyncTask.doInBackground(LeftSideMenuController.java:1)
02-16 21:31:25.138: W/System.err(22428): at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-16 21:31:25.138: W/System.err(22428): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-16 21:31:25.138: W/System.err(22428): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-16 21:31:25.138: W/System.err(22428): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-16 21:31:25.138: W/System.err(22428): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-16 21:31:25.138: W/System.err(22428): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-16 21:31:25.138: W/System.err(22428): at java.lang.Thread.run(Thread.java:856)
02-16 21:36:26.873: W/IInputConnectionWrapper(22428): getSelectedText on inactive InputConnection
02-16 21:36:26.873: W/IInputConnectionWrapper(22428): setComposingText on inactive InputConnection
02-16 21:36:26.873: W/IInputConnectionWrapper(22428): getExtractedText on inactive InputConnection
I have Json data like this fromat.
{
"get": [],
"post": {
"_event": "mydatajson",
"user_id": "12"
},
"data": {
"3": {
"ID": 1172,
"title": "dsfsdf"
},
"4": {
"ID": 1172,
"title": "dsfsdf"
},
"5": {
"ID": 1172,
"title": "dsfsdf"
},
"6": {
"ID": 1172,
"title": "dsfsdf"
},
"7": {
"ID": 1172,
"title": "dsfsdf"
},
"8": {
"ID": 1172,
"title": "dsfsdf"
},
"9": {
"ID": 1172,
"title": "dsfsdf"
}
}
}
What i try to get data from java:
List<NameValuePair> mypickDetails=new ArrayList<NameValuePair>();
mypickDetails.add(new BasicNameValuePair("_event", event));
mypickDetails.add(new BasicNameValuePair("user_id", userID));
HttpClient hc=new DefaultHttpClient();
HttpPost hp=new HttpPost(HttpPath.url);
try {
hp.setEntity(new UrlEncodedFormEntity(mypickDetails));
// Execute HTTP Post Request
HttpResponse response=hc.execute(hp);
String result = EntityUtils.toString(response.getEntity());
String jsontext = new String(result);
//take object according to json format result
JSONObject entries = new JSONObject(jsontext);
JSONArray postListArray = entries.getJSONArray("data");
for (int i = 0; i < postListArray.length(); i++) {
Log.d("Geting Value---", "+----"+postListArray.length());
JSONObject postListObj = postListArray.getJSONObject(i);
String myPickName = postListObj.getString("title");
DashboardVariables.mypickname.add(myPickName);
}
Thank you advance.
解决方案
"data": {
data
is not a JSONArray
. Its a JSONObject
.
But you have
JSONArray postListArray = entries.getJSONArray("data"); // wrong
{
represents a json object node
[
represents a json array node
"data": { // json object data
"3": { // json object 3
"ID": 1172, // int
"title": "dsfsdf" // string
}
Use
JSONObject jb = (JSONObject)entries.getJSONObject("data");
JSONObject three = jb.getJSONObject("3");
int id = three.getInt("ID");
String title = three.getString("title");
这篇关于如何解析JSON数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文