2012-01-16 231 views
1

在發送POST傳遞查詢變量後,我的服務器使用php代碼中的jsonencode()返回了以下字符串。Android - JSON/GSON解析

{ 「距離」: 「0.00194210443015968」, 「usrlat」: 「38.5817」, 「usrlong」: 「 - 77.3245」, 「globalid」: 「245」} { 「距離」: 「4.94445650874035」, 「usrlat」 : 「38.6501」, 「usrlong」: 「 - 77.2975」, 「globalid」: 「233」} { 「距離」: 「4.94445650874035」, 「usrlat」: 「38.6501」, 「usrlong」: 「 - 77.2975」,「globalid 「:」 242" }

代碼:

 try 
     { etc.. connection details.. 

      request = new OutputStreamWriter(connection.getOutputStream()); 
      request.write(parameters); 
      request.flush(); 
      request.close();    
      String line = "";     
      //Convert response to a string 
      InputStreamReader isr = new InputStreamReader(connection.getInputStream()); 
      BufferedReader reader = new BufferedReader(isr); 
      StringBuilder sb = new StringBuilder(); 
      while ((line = reader.readLine()) != null) 
      { 

       sb.append(line + "\n"); 

      } 
      // Response from server will be stored in response variable.     
      response = sb.toString(); 

      //try parse the string to a JSON object 
      try{ 

       jObject = new JSONObject(response);     

      }catch(JSONException e){... 

背景 - 這個簡單的碼位已經產生從響應僅保持第一元素(對象)一個jObject。我已經嘗試通過在前後插入方括號將響應更改爲jArray,但響應中的元素(對象)不會用逗號分隔。考慮通過響應來插入逗號,然而存在相同的根問題......解析和交互。此外,我已根據響應創建了具有屬性的類。沒有運氣,因爲存在相同的根問題...解析和迭代。我搜索了網絡,發現JSON對於XML來說是一個非常簡單和輕量級的選擇。我曾瀏覽過當地的書店,發現JSON不是一本值得研究的話題。最後,我已經轉向GSON瞭解清楚。

問題 - 使用JSON或GSON如何反序列化和遍歷響應以在我的android應用程序中創建可用對象?我在尋找解決方案時詢問正確的問題嗎?

+0

下面是一個例子http://thegeekyland.blogspot.com/2015/11/serializing-and-deserializing-json-from.html – Arlind 2015-11-30 00:10:19

回答

1

您基本上遇到了您的問題 - 文本不是有效的JSON數組。所以,你有兩個選擇:

  1. 預處理JSON,使之成爲有效的JSON陣列
  2. 通過一個閱讀每行一個和每行創建一個JSONObject,然後每個對象手動添加到JSONSArray或純舊的java陣列或集合

僅供參考 - 假設您無法控制服務器端。如果這樣做,更改代碼,使之成爲有效的JSON陣列

+0

mjmarsh感謝反應。毫無疑問,我是新手。預處理帶給我迭代。響應全部被分解。想繞過JSONArray還是需要通過字符串迭代對嗎?最後,服務器在託管平臺上,審查了ini。 jsonencode()可以在mySQL上調整嗎? – 2012-01-17 01:04:21

+0

我已將服務器輸出更改爲[{「distance」:「0.00194210443015968」,「usrlat」:「38.5817」,「usrlong」:「 - 77.3245」,「globalid」:「245」}] [{「distance」 「4.94445650874035」, 「usrlat」: 「38.6501」, 「usrlong」: 「 - 77.2975」, 「globalid」: 「233」}] [{ 「距離」: 「4.94445650874035」, 「usrlat」: 「38.6501」,「usrlong 「:」 - 77.2975「,」globalid「:」242「}]另外,我已經包含jArray = new JSONArray(response);我已經嘗試了一個迭代for循環,但只拉第一個數組。 – 2012-01-17 02:56:59

+0

mjmarsh - 謝謝。我修改了服務器的輸出。我使用以下鏈接添加每個正確的JSONObject返回給適當的格式化JSON數組。在服務器上執行它比在Java中進行修改是可管理的。我用http://stackoverflow.com/questions/383631/json-encode-mysql-results來創建適當的數組。我使用http://jsonformatter.curiousconcept.com/來驗證響應。現在我將在應用程序中使用JSON或GSON。再次感謝! – 2012-01-17 14:54:52