【问题标题】:Error when converting string to JSON array将字符串转换为 JSON 数组时出错
【发布时间】:2012-04-24 21:19:32
【问题描述】:

我在 android LogCat 中收到此错误消息

04-24 21:14:02.603: W/System.err(831): org.json.JSONException: Value {"id":"602414132","first_name":"Adham","username":"adham.enaya","locale":"en_GB","link":"http:\/\/www.facebook.com\/adham.enaya","name":"Adham Enaya","last_name":"Enaya","gender":"male"} of type org.json.JSONObject cannot be converted to JSONArray
04-24 21:14:02.603: W/System.err(831):  at org.json.JSON.typeMismatch(JSON.java:107)
04-24 21:14:02.603: W/System.err(831):  at org.json.JSONArray.<init>(JSONArray.java:91)
04-24 21:14:02.603: W/System.err(831):  at org.json.JSONArray.<init>(JSONArray.java:103)
04-24 21:14:02.615: W/System.err(831):  at pit.opensource.readjson.D0ReadJSONWebServiceActivity.pasreJSON(D0ReadJSONWebServiceActivity.java:85)
04-24 21:14:02.623: W/System.err(831):  at pit.opensource.readjson.D0ReadJSONWebServiceActivity.access$0(D0ReadJSONWebServiceActivity.java:78)
04-24 21:14:02.623: W/System.err(831):  at pit.opensource.readjson.D0ReadJSONWebServiceActivity$DownloadFBUser.doInBackground(D0ReadJSONWebServiceActivity.java:108)
04-24 21:14:02.623: W/System.err(831):  at pit.opensource.readjson.D0ReadJSONWebServiceActivity$DownloadFBUser.doInBackground(D0ReadJSONWebServiceActivity.java:1)
04-24 21:14:02.623: W/System.err(831):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-24 21:14:02.633: W/System.err(831):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
04-24 21:14:02.633: W/System.err(831):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
04-24 21:14:02.633: W/System.err(831):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
04-24 21:14:02.633: W/System.err(831):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
04-24 21:14:02.633: W/System.err(831):  at java.lang.Thread.run(Thread.java:1019)

什么问题,我认为是字符串编码?!

更新:

代码在这里

//Download text -------------------------------------------------------------
private String DownloadText(String urlString){
    InputStream in = null;
    StringBuilder sb = new StringBuilder();
    try{
        in = OpenHttpConnection(urlString);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String line="";
        while((line = br.readLine())!= null){
            sb.append(line);
        }
    }catch(IOException ex){

    }
    return sb.toString();
}

//Parse JSON text -----------------------------------------------------------
private FBUser pasreJSON(String url){
    FBUser user = null;
    JSONArray json;
    Log.d("JSON----------------",DownloadText(url));
    try {
        user = new FBUser();
        json = new JSONArray(DownloadText(url));
        for(int i=0;i<json.length();i++){
            JSONObject object = json.getJSONObject(i);
            user.id = object.getString("id");
            user.name = object.getString("name");
            user.first_name = object.getString("first_name");
            user.last_name = object.getString("last_name");
            user.link = object.getString("link");
            user.username = object.getString("username");
            user.gender = object.getString("gender");
            user.locale = object.getString("locale");
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return user;
}

【问题讨论】:

  • 请附上您的源代码
  • 我不确定 JSONArray 是否可以解析不包含一堆原语的字符串 - 你的数组元素是名称-值对。编辑:所以请包括你的源代码,就像杰森已经提到的那样

标签: android arrays string json


【解决方案1】:

在这一行:

json = new JSONArray(DownloadText(url));

改成:

json = new JSONObject(DownloadText(url));

显然将json 更改为JSONOBject

【讨论】:

    【解决方案2】:

    错误在于这不是 JSONArray,而是 JSONObject。数组用方括号括起来,而对象用大括号括起来。

    看看json.org,官方网站。

    【讨论】:

      【解决方案3】:

      试试

      JSONObject object = new JSONObject (DownloadText(url));
                           user.id = object.getString("id");   
                     user.name = object.getString("name");  
                      user.first_name = object.getString("first_name"); 
                       user.last_name = object.getString("last_name"); 
                       user.link = object.getString("link");         
               user.username = object.getString("username");        
                user.gender = object.getString("gender");            
            user.locale = object.getString("locale");  
      

      【讨论】:

        【解决方案4】:

        看起来 pit.opensource.readjson.D0ReadJSONWebServiceActivity.pasreJSON 正在尝试将 facebook 用户信息响应解码为 JSONArray 类型。

        您应该将其存储在 JSONObject 中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-29
          • 2020-12-19
          • 1970-01-01
          • 1970-01-01
          • 2021-03-30
          • 2020-04-27
          • 2013-03-14
          • 1970-01-01
          相关资源
          最近更新 更多