2012-01-16 146 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