2014-09-23 3 views
1

Я пытаюсь разобрать JSON с URL-адреса, я думаю, что я пробовал 100 различных способов, но до сих пор я не нашел правильного решения. Я считаю, что проблема, с которой я столкнулась, связана с структурой данных из JSON, которую я получаю. У каждого есть имя, начинающееся с «0» и возрастающее до последнего. Я хочу взять все эти компании и поместить их в архаиста.JSON Parsing: org.json.JSON.typeMismatch

public static String url = "http://api.richmondsystemengineering.com/v1/?query_type=rva_card_get_businesses&appkey=51e53e510ecc14e4b2bde952f0c589f0"; 

    public static void getData(Context context) { 
    // Hashmap for ListView 

    ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>(); 

    HttpClient httpClient = new DefaultHttpClient(); 
    HttpResponse response = null; 
    HttpGet getMethod = new HttpGet(url); 
    try { 
     response = httpClient.execute(getMethod); 

     // CONVERT RESPONSE TO STRING 
     String result = EntityUtils.toString(response.getEntity()); 

     // CONVERT RESPONSE STRING TO JSON ARRAY 
     JSONArray ja = new JSONArray(result); 

     // ITERATE THROUGH AND RETRIEVE CLUB FIELDS 
     int n = ja.length(); 
     for (int i = 0; i < n; i++) { 
      // GET INDIVIDUAL JSON OBJECT FROM JSON ARRAY 
      JSONObject c = ja.getJSONObject(i); 
      Log.e("name", c.getString("phone")); 


      // Storing each json item in variable 
      companyName = c.getString("name"); 
      companyEmail = c.getString("email"); 
      companyAddress = c.getString("address"); 
      companyCity = c.getString("city"); 
      companyZip = c.getString("zip"); 
      companyDescription = c.getString("description"); 



      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put("name", companyName); 
      map.put("email", companyEmail); 
      map.put("address", companyAddress); 
      map.put("city", companyCity); 
      map.put("zip", companyZip); 
      map.put("description", companyDescription); 
      contactList.add(map); 


     } 
    } catch (Exception e) { 
     error = true; 

     e.printStackTrace(); 
    } 

} 

Тогда на моем LogCat я получаю:

org.json.JSONException: Value {"EAT_subcat":"farm, market and grocery","phone":"(804) 780-0086","WORK_subcat":"advertising","RID":"6","state":"","featured":"1","EAT":"1","city":"Richmond","DRINK":"1","distance":5532.3,"PLAY_subcat":"indoor and outdoor recreational activities","ENJOY_subcat":"entertainment and landmarks","updated":"2014-07-09 00:48:50","created":"2014-09-17 13:07:16","description":"Bistro 27 is a lively European bistro located in downtown Richmond, Virginia at the corner of Broad and Adams. With our floor-to-ceiling, wrap around windows and airy 20 foot ceilings, Twenty Seven offers a dining experience like no other in Richmond. Our menu is influenced by the hearty, healthy cuisines of Italy and France and features something for everyone's taste. Twenty Seven's wine lists ranges from inexpensive, little known gems to world class award winners. Parking is free at the corner of Adam and Grace Street, in the southwest corner. Look for the Bistro 27 sign ","SHOP_subcat":"home garden goods and electronics","zip4":"0","name":"Bistro 27","longitude":"-77.442953","LIVE_subcat":"health fitness and edu classes","fname":"","zip":"23220","logo":"Pic" 
at org.json.JSON.typeMismatch(JSON.java:100) 
at org.json.JSONObject.getJSONArray(JSONObject.java:553) 
at com.rse.rvacard.SearchActivity.getData(SearchActivity.java:167) 
at com.rse.rvacard.SearchActivity.onCreate(SearchActivity.java:79) 
at android.app.Activity.performCreate(Activity.java:5586) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2402) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2497) 
at android.app.ActivityThread.access$900(ActivityThread.java:168) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1306) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:146) 
at android.app.ActivityThread.main(ActivityThread.java:5678) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
at dalvik.system.NativeStart.main(Native Method) 
+1

новообращенный ответ на 'JSONObject' вместо' JSONArray' потому что строка ответа содержит 'JSONObject' вместо' JSONArray' –

+0

К сожалению, немного медленно, когда дело доходит до разбора данных. Как именно я это делаю? –

+0

копия результат пожалуйста. –

ответ

1

О Json: [{в этих скобках}, {есть массив}, {объектов}] {в этих скобках просто объект}

Вы сказали «эй, получи мне этот JSONArray» (ом это рифмуется!), и Eclipse говорит вам: «Ты с ума сошел? Я не вижу массив» (скрытое сообщение есть только объект, не массив)

Подробнее о json here.

// CONVERT RESPONSE TO STRING 
    String result = EntityUtils.toString(response.getEntity()); 

    // CONVERT RESPONSE STRING TO JSON OBJECT 
    JSONObject c = new JSONObject (result); 

     // Storing each json item in variable 
     companyName = c.getString("name"); 
     companyEmail = c.getString("email"); 
     companyAddress = c.getString("address"); 
     companyCity = c.getString("city"); 
     companyZip = c.getString("zip"); 
     companyDescription = c.getString("description");}