2014-09-23 122 views
1

我試圖解析從一個URL的JSON,我想我已經嘗試了100種不同的方式,但到目前爲止我還沒有找到正確的解決方案。我相信我遇到的問題是來自我收到的JSON的數據結構。每個名稱都以「0」開始並且增加到最後一個。我想把所有這些公司都放進一個數組列表中。JSON解析: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' – 2014-09-23 17:08:29

+0

對不起,有點慢,當涉及到的數據進行解析。我到底該怎麼做? – 2014-09-23 17:47:16

+0

請複製結果。 – 2014-09-23 17:59:41

回答

1

有關JSON: [{在這些括號},{有一個數組},{對象}] {在這些括號是隻是一個對象}

你說「嗨,讓我那個JSONArray」(omg it rhymes!)和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");}