【问题标题】:org.json.JSONException: Unterminated object at character on Androidorg.json.JSONException:Android 上字符处的未终止对象
【发布时间】:2020-01-24 14:21:03
【问题描述】:

我解析 JSON 字符串并遇到错误

org.json.JSONException: 字符 25 处未终止的对象

我的 JSON 是从 Facebook 检索到的

{Response:  responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"data":[{"venue":{"id":108242939200809,"zip":"","longitude":11.4,"latitude":62.5833,"street":""},"location":"Røros, Norway","eid":1473462312875161,"pic_big":"https:\/\/fbcdn-profile-a.akamaihd.net\/static-ak\/rsrc.php\/v2\/yn\/r\/5uwzdFmIMKQ.png","pic_small":"https:\/\/fbcdn-profile-a.akamaihd.net\/static-ak\/rsrc.php\/v2\/yy\/r\/XcB-JGXohjk.png","description":"Test","name":"Test"},{"venue":{"id":105818232792451,"zip":"","longitude":108.217,"latitude":16.0167,"street":""},"location":"Hòa Vang","eid":1425682134338854,"pic_big":"https:\/\/fbcdn-profile-a.akamaihd.net\/static-ak\/rsrc.php\/v2\/yn\/r\/5uwzdFmIMKQ.png","pic_small":"https:\/\/fbcdn-profile-a.akamaihd.net\/static-ak\/rsrc.php\/v2\/yy\/r\/XcB-JGXohjk.png","description":"test","name":"Test"}]}}, error: null, isFromCache:false}

我的 JSON 解析器是

public static JSONArray parse(Response response) throws JSONException{          
        JSONArray jsonArray=new JSONArray(response.toString());
        return jsonArray;
    }

请帮助我。非常感谢。

【问题讨论】:

标签: android json facebook-fql


【解决方案1】:

这可能是因为您在使用response.toString()response 转换为字符串后尝试解析response

所以如果你的response

{"title":"This is Title","message":"This is message"}

然后您将其转换为 Stringresponse.toString()

那么你的response会是这样的

{title:This is Title,message:This is message}

因此,您尝试解析 String 类型的 response,编译器将无法解析 response,它会解析 throwserror,例如 Unterminated object at character......

所以请确保您正在解析有效的 JSON。

编辑(信用:Dhruv Raval for below edited solution

您可以通过以下方式解决此问题:

之前:

GraphResponse response;
JSONObject jObjResponse = new JSONObject(response.toString());

之后:

GraphResponse response;
JSONObject jObjResponse = new JSONObject(String.valueOf(response.getJSONObject()));

【讨论】:

  • 请提供此问题的解决方案。谢谢!
  • @DakshGargas 在解析 JSON 之前调试代码并确保 JSON 有效(在本例中为“非字符串”),有关解决方案,请参阅我更新的答案。
  • 是的,我已修复它...我刚刚添加了该评论,以便您可以帮助未来的访问者。
  • 谢谢 :)
【解决方案2】:

我遇到了同样的错误并像这样解决它们:

GraphResponse 响应;

之前:

       JSONObject jObjResponse = new JSONObject(response.toString());

之后:

JSONObject jObjResponse = new JSONObject(String.valueOf(response.getJSONObject()));

【讨论】:

    【解决方案3】:

    只需使用JSONObject graphObj =response.getJSONObject();,您将获得graphObject

    【讨论】:

      【解决方案4】:

      您的 JSON 无效。所有变量名都需要加引号。

      【讨论】:

      • 嗨,Gabe,你能解释更多吗?这是我从 Facebook 得到的。如何纠正它们?谢谢。
      • 注意 state 后面的所有变量名是如何用 "" 包围的?这是正确的。看看前几个怎么没有?那是无效的。当你尝试解析它时它会导致崩溃,因为没有它它不知道变量名在哪里结束。
      【解决方案5】:

      改变

      JSONArray jsonArray=new JSONArray(response.toString());
      

      JSONObject start = new JSONObject(String.valueOf(response.getJSONObject()));
      

      然后直接调用

       JSONArray data = start.getJSONArray("data");
      

      它为您提供“数据”JSON 数组。

      【讨论】:

        【解决方案6】:
        try {
                    JSONObject jsonData = response.getJSONObject();
                    JSONArray jsonArray = jsonData.getJSONArray("data");
        
                    Log.e("MainActivity ", "jsondata   -->  " + jsonArray.toString(2));
                    Log.e("MainActivity ", "jsonArray.length()->  " + jsonArray.length());
        
                    likesPojos.clear();
                    for (int i = 0; i < jsonArray.length(); i++) {
        
                        JSONObject json = jsonArray.getJSONObject(i);
        
                        Log.e("MainActivity ", "message  -->  " + json.getString("name"));
                        Log.e("MainActivity ", "id  -->  " + json.getString("id"));
        
                        LikesPojo likesPojo = new LikesPojo();
                        likesPojo.setId(json.getString("id"));
                        likesPojo.setName(json.getString("name"));
                        likesPojos.add(likesPojo);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
        

        【讨论】:

          猜你喜欢
          • 2022-06-16
          • 2019-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多