2014-09-09 4 views
0

Я пытаюсь разработать приложение json parser. Здесь я получаю сообщение об ошибке JSON парсер исключение как "jsonarray cannot be converted to jsonobject"Исключение JSONParser в android listview

Я следующий ниже формате JSON:

[ 
{ 
    "status": "ok", 
    "data": [ 
     { 
      "term_id": "28", 
      "name": "All Meets", 
     }, 
     { 
      "term_id": "4", 
      "name": "Classic Cars", 
      }, 
     { 
      "term_id": "30", 
      "name": "Trucks", 
      } 
    ], 
    "controller": "user1" 
}, 
0 
] 

Это код, где исключение:

class GetCategories extends AsyncTask<String, String, String> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(String... args) { 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     JSONObject json = jsonParser.makeHttpRequest(url_getcategories, "POST", params); 
     Log.d("Get Categories", json.toString()); 
     try { 
      success = json.getString(TAG_SUCCESS); 
      if (success.equalsIgnoreCase("ok")) { 
       JSONArray sys = json.getJSONArray(TAG_CATEGORY); 
       System.out.println("List of Array =" + " " + sys); 
       for (int i = 0; i < sys.length(); i++) { 
        JSONObject c = sys.getJSONObject(i); 
        String cartitle = c.getString("name"); 
        System.out.println("List of Categories =" + " " + cartitle); 
       }   
      } else { 
       error = json.getString(TAG_ERROR); 
       } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String file_url) { 
     super.onPostExecute(file_url); 
    } 
} 

С над кодом что не так в функциональности? Проверьте его и укажите решение.

+0

Как в опубликованном JSON String с вопросом, корневой объект JSON является 'JSONArray' вместо' JSONObject'. поэтому вам нужно будет преобразовать полученную строку с сервера в 'JSONArray', а также изменить тип возврата' makeHttpRequest' в JSONArray. –

ответ

2
When i put your J son format in `http://www.jsoneditoronline.org/` , It gave me issue. 

So, i formatted it to 

    { 
    "status": "ok", 
    "data": [ 
     { 
      "term_id": "28", 
      "name": "All Meets" 
     }, 
     { 
      "term_id": "4", 
      "name": "Classic Cars" 
     }, 
     { 
      "term_id": "30", 
      "name": "Trucks" 
     } 
    ], 
    "controller": "user1" 
    } 

Я думаю, что ваш код будет работать с этим форматом. Вы можете сослаться на Android JSON Parser Tutorial для более детального решения вашей проблемы.

0

Существует разница между массивом JSON и объектом JSON . Первый содержится в [], а последний - в {}.

У вас есть массив, и вы пытаетесь создать из него объект.

Если бы мир был разумным местом, JSONObject и JSONArray оба сходили бы из одного класса, и вы могли бы создать экземпляр, а затем спросить его, является ли это массивом или объектом. Но, к сожалению, мир иногда делает глупые вещи.

0

Ваш массив JSON [], а не объект JSON {}. Сначала преобразуйте строку в массив JSON.

0

Попробуйте этот путь, надейтесь, что это поможет вам решить вашу проблему.

class GetCategories extends AsyncTask<String, String, ArrayList<HashMap<String,String>>> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 
    protected ArrayList<HashMap<String,String>> doInBackground(String... args) { 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     JSONArray json = jsonParser.makeHttpRequest(url_getcategories, "POST", params); 
     ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String, String>>(); 
     try { 
      if (json.getJSONObject(0).getString(TAG_SUCCESS).equalsIgnoreCase("ok")) { 
       JSONArray sys = json.getJSONArray(TAG_CATEGORY); 
       for (int i = 0; i < sys.length(); i++) { 
        HashMap<String,String> row = new HashMap<String, String>(); 
        row.put("term_id",sys.getJSONObject(i).getString("term_id")); 
        row.put("name", sys.getJSONObject(i).getString("name")); 
        list.add(row); 
       } 
      } 
      else{ 
       error = json.getJSONObject(0).getString(TAG_ERROR); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return list; 

    } 

    protected void onPostExecute(ArrayList<HashMap<String,String>> result) { 
     super.onPostExecute(result); 

    } 

} 
Смежные вопросы