org.json.JSONException:创建JSON对象时字符0处的输入结束

时间:2015-01-27 09:56:43

标签: java android json

我只是想尝试创建这样的JSON对象:

JSONObject jsonObject = new JSONObject(new JsonUtility().execute(UrlUtility.url + "/" + lessonUrl).get());

此处发生错误^在catch块中收到消息:

org.json.JSONException: End of input at character 0 of 

JsonUtility课程如下(我相信问题不在于但仍然存在):

    private class JsonUtility extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {
        String result = "";
        try {
            InputStream inputStream = new URL(params[0]).openStream();
            BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"), 8);
            StringBuilder sBuilder = new StringBuilder();

            // Reading Json into StringBuilder
            String line = null;
            while ((line = bReader.readLine()) != null) {
                sBuilder.append(line + "\n");
            }

            inputStream.close();
            // Converting Json from StringBuilder to String
            result = sBuilder.toString();

        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
}

您会看到响应是从字符串连接起来的(由于应用程序逻辑)。最后一个字符串是:http://itvdn-api.azurewebsites.net/api/courses/test-driven-development/tdd-introduction。正如您所看到的那样,当我重定向到该链接时,它会提供JSON响应。

我尝试评估此UrlUtility.url并收到: enter image description here

奇怪的char数组结尾让我困惑。预示着这个问题。试图使用String.replaceAll("'\u0000'0", "" )替换这些字符。没工作。

请帮忙。会欣赏任何想法。感谢。


修改

此外,当我将链接硬编码为:

JSONObject jsonObject = new JSONObject(new JsonUtility().execute("http://itvdn-api.azurewebsites.net/api/courses/test-driven-development/tdd-introduction").get());

有效!


编辑#2 @ρяσѕρєяK

result = sBuilder.toString();为空 - "",因为它无法解析该连接字符串。

注意:我一直在使用与此应用程序中的不同链接相同的解析器,例如http://itvdn-api.azurewebsites.net/api/courses并且工作正常(但没有连接链接)

1 个答案:

答案 0 :(得分:1)

/**
     * Convert InputStream into String
     * @param is
     * @return
     * @throws IOException Throws an IO Exception if input stream cannot be read
     */
    public static String stringFromInputStream(InputStream is) throws IOException {
        if (is != null) {
            byte[] bytes = new byte[1024];
            StringBuilder x = new StringBuilder();
            int numRead = 0;
            while ((numRead = is.read(bytes)) >= 0) 
                x.append(new String(bytes, 0, numRead));
            return x.toString();
        }
        else {
            return "";
        }
    }

使用此方法读取输入流并获取字符串。