如何解析json数据
我是非常新的使用从Web获取JSON数据,所以我在这里有点困惑。如何在android中获取这个JSON数据:我在json fromat中出错。如何解析json数据
l喜欢这在日志猫。
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
我有这样的Fromat Json数据。
{
"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"
}
}
}
什么,我试图从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);
}
谢谢前进。
"data": {
data
不是JSONArray
。它的一个JSONObject
。
但是你必须
JSONArray postListArray = entries.getJSONArray("data"); // wrong
{
代表一个JSON对象节点
[
表示JSON数组节点
"data": { // json object data
"3": { // json object 3
"ID": 1172, // int
"title": "dsfsdf" // string
}
使用
JSONObject jb = (JSONObject)entries.getJSONObject("data");
JSONObject three = jb.getJSONObject("3");
int id = three.getInt("ID");
String title = three.getString("title");
我也会编辑答案来解释JSONArrays在括号[]中,而在大括号内的字典{}。 – Lefteris
@Lefteris我编辑 – Raghunandan
是的,只是第二次当我发布这个:) – Lefteris
JSON中的“data”字段包含一个对象,而不是一个数组。错误信息告诉你。
您可能想要访问json.org以更好地理解JSON对象的语法和结构; []
用于表示一个数组。
因此,而不是一个数组,你就需要把它作为一个对象:
JSONObject dataObject = entries.getJSONObject("data");
然后,如果你想通过田野迭代/在该对象的对象,你需要获取列表(字段)并获取每个对象:
for (String key : dataObject.keys())
{
JSONObject postListObj = dataObject.getJSONObject(key);
...
}
JSON *中的“data”字段不是*数组。错误很明显。 –
也许你应该首先查看关于该主题的众多教程之一,例如http://www.androidhive.info/2012/01/android-json-parsing-tutorial/ – cania