繁体   English   中英

org.json.JSONException:[重复]的字符0输入结束

[英]org.json.JSONException: End of input at character 0 of [duplicate]

这个问题已经在这里有了答案:

在浏览器中手动运行URL时,将返回此JSON。

   {
  "error": false,
  "0": {
    "question": "Using the information that 6.7 × 52 = 348.4, Find the value of: 6.7 × 520",
    "useranswer": "3484",
    "correctanswer": "3484",
    "correct": "1"
  },
  "1": {
    "question": "Jane drives 50mph. London is 350 miles away. How long will it take?",
    "useranswer": "5",
    "correctanswer": "7",
    "correct": "0"
  },
  "2": {
    "question": "74*3?",
    "useranswer": "222",
    "correctanswer": "222",
    "correct": "1"
  },
  "3": {
    "question": "39+31?",
    "useranswer": "70",
    "correctanswer": "70",
    "correct": "1"
  }
}

代码如下:

public List<String> GetTestResultsFromUserID(Integer userID){
    BufferedReader bufferedReader = null;
    try {
        URL url = new URL(AppConfig.Results_URL + "?userid=" + userID);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setRequestProperty ("Authorization", "Basic Z2FycmV0dGg6ZnJBc3Rpbmc0");
        bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String result;                    
        result = bufferedReader.readLine();
       return ProcessResultSetFromDatabase(result);
    }catch(Exception e){
        Log.d("Exception in try", "Exception" + e.toString());
        return null;
    }       
}

然后将result在这里进行处理:

private List<String> ProcessResultSetFromDatabase(String result){
    List<String> resultSet = new ArrayList<String>();
    try{
        JSONObject jObj = new JSONObject(result);
        boolean error = jObj.getBoolean("error");       

        if (!error){ 
            for (int i=0; i<48; i++){
                JSONObject rSet = jObj.getJSONObject(Integer.toString(i));
                resultSet.add("Q: "+rSet.getString("question")+" Correct Ans: "+rSet.getString("correctanswer")+" Given Ans: "+rSet.getString("useranswer")+" Correct:"+(rSet.getString("correct")));                                   
            }     
        }else{
            resultSet.add("No results at the moment");
        }           
    }catch(JSONException e){
        e.printStackTrace();
    }               
    return resultSet;
}

注意:传递给ProcessResultSetFromDatabase的结果传递时似乎为空。

您的JSON输出在"0":{"question": String中,并且您传递了整数,因此您需要将int转换为string。

 for (int i=0; i<48; i++){


int tmpInt = i;
String str= String.valueOf(i);

                JSONObject rSet = jObj.getJSONObject(str);
                resultSet.add("Q: "+rSet.getString("question")+" Correct Ans: "+rSet.getString("correctanswer")+" Given Ans: "+rSet.getString("useranswer")+" Correct:"+(rSet.getString("correct")));                                   
            }  

您应该使用Iterator解析数据。

 JSONObject jObj = new JSONObject(result);
 if (jObj.length() > 0) {

                    Iterator<String> keys = jObj.keys();
                    while (keys.hasNext()) {
                        String key = keys.next();
                        JSONObject json= jObj.optJSONObject(key);

                        Log.e("json", json.toString());

                        if (json!= null) {
                        resultSet.add("Q: "+json.getString("question")+" Correct Ans: "+json.getString("correctanswer")+" Given Ans: "+json.getString("useranswer")+" Correct:"+(json.getString("correct")));                                   
                    }
                }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM