【问题标题】:Android - JSON / GSON ParsingAndroid - JSON / GSON 解析
【发布时间】:2012-01-16 22:39:51
【问题描述】:

在为查询发送 POST 传递变量后,我的服务器使用 php 代码中的 jsonencode() 返回了以下字符串。

{"distance":"0.00194210443015968","usrlat":"38.5817","usrlong":"-77.3245","globalid":"245"}{"distance":"4.94445650874035","usrlat": "38.6501","usrlong":"-77.2975","globalid":"233"}{"distance":"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 或 GS​​ON 如何反序列化和迭代响应以在我的 android 应用程序中创建可用对象?我在寻找解决方案时提出了正确的问题吗?

【问题讨论】:

标签: android json parsing iteration gson


【解决方案1】:

您基本上遇到了您的问题 - 文本不是有效的 JSON 数组。所以你有两个选择:

  1. 预处理 JSON 以使其成为有效的 JSON 数组
  2. 逐行读取并为每一行创建一个 JSONObject,然后手动将每个对象添加到 JSONSArray 或普通的旧 java 数组或集合中

仅供参考 - 这假设您无法控制服务器端。如果这样做,请更改该代码以使其成为有效的 JSON 数组

【讨论】:

  • mjmarsh 感谢您的回复。毫无疑问,我是新手。预处理使我进入迭代。响应都是串联的。想绕过 JSONArray 仍然需要通过字符串进行迭代吗?最后,服务器是在托管平台上,已经查看了ini。 jsonencode() 可以在 mySQL 上调整吗?
  • 我已将服务器输出更改为 [{"distance":"0.00194210443015968","usrlat":"38.5817","usrlong":"-77.3245","globalid":"245"} ][{"distance":"4.94445650874035","usrlat":"38.6501","usrlong":"-77.2975","globalid":"233"}][{"distance":"4.94445650874035","usrlat" :"38.6501","usrlong":"-77.2975","globalid":"242"}] 此外,我还包括了 jArray = new JSONArray(response);我尝试了一个迭代 for 循环,但只拉入第一个数组。
  • mjmarsh - 谢谢。我修改了服务器的输出。我使用以下链接将返回的每个正确 JSONObject 添加到正确格式化的 JSON 数组。在服务器上执行此操作比在 Java 中修改更容易。我使用stackoverflow.com/questions/383631/json-encode-mysql-results 创建了正确的数组。我使用jsonformatter.curiousconcept.com 来验证响应。现在我将在应用程序中使用 JSON 或 GS​​ON。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
相关资源
最近更新 更多