2014-02-17 130 views
-1

我是非常新的使用從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); 




      } 

謝謝前進。

+1

JSON *中的「data」字段不是*數組。錯誤很明顯。 –

+0

也許你應該首先查看關於該主題的衆多教程之一,例如http://www.androidhive.info/2012/01/android-json-parsing-tutorial/ – cania

回答

1
"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"); 
+0

我也會編輯答案來解釋JSONArrays在括號[]中,而在大括號內的字典{}。 – Lefteris

+0

@Lefteris我編輯 – Raghunandan

+0

是的,只是第二次當我發佈這個:) – Lefteris

0

使用

.getJSONObject("data") 

而是因爲數據是JSON對象。 JSON數組以[]開頭

+1

你也應該向OP解釋原因。 – Lefteris

0

JSON中的「data」字段包含一個對象,而不是一個數組。錯誤信息告訴你。

您可能想要訪問json.org以更好地理解JSON對象的語法和結構; []用於表示一個數組。

因此,而不是一個數組,你就需要把它作爲一個對象:

JSONObject dataObject = entries.getJSONObject("data"); 

然後,如果你想通過田野迭代/在該對象的對象,你需要獲取列表(字段)並獲取每個對象:

for (String key : dataObject.keys()) 
{ 
    JSONObject postListObj = dataObject.getJSONObject(key); 
    ... 
}