java - JSONTokener : A JSONObject text must begin with '{'

标签 java json

在下面的代码中,在 URI 上使用 JSON 时遇到异常

public static String processRestResponse(String language){
    URI uri = null;
    JSONTokener tokener = null;
    try {
        uri = new URI("https://api.github.com/search/repositories?q=language:Java");
        URL url = uri.toURL();
        InputStream inputStream = url.openStream();
        tokener = new JSONTokener(inputStream.toString());
        JSONObject root = new JSONObject(tokener);
    } catch (Exception e) {
        e.printStackTrace();
    }

异常如下...

org.json.JSONException: A JSONObject text must begin with '{' at character 1
at org.json.JSONTokener.syntaxError(JSONTokener.java:410)
at org.json.JSONObject.<init>(JSONObject.java:179)
at Assignment1.processRestResponse(Assignment1.java:48)
at Assignment1.main(Assignment1.java:108)

我可以采取其他适合的替代方法吗?

最佳答案

确保使用正确的字符集正确读取InputStream,例如如下所示:

StringBuilder textBuilder = new StringBuilder();
try (Reader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName(StandardCharsets.UTF_8.name())))) {
    int c = 0;
    while ((c = reader.read()) != -1) {
        textBuilder.append((char) c);
    }
}

之后你就可以使用它了:

tokener = new JSONTokener(textBuilder.toString());
JSONObject root = new JSONObject(tokener);

关于java - JSONTokener : A JSONObject text must begin with '{' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44325416/

相关文章:

ios - AFNetworking 2.0 总是返回 403

java - 使用 Jackson Java 解析 JSON

java - 添加到另一个 JPanel 后 JPanel 会变小(很多)

javascript - 从服务器请求 JSON 并用 Javascript 进行解析

arrays - 自定义排序 Groovy JSONArray - 首先自定义值,然后按字母顺序

python - Marshmallow:如何将字典或对象序列化为 XML?

java - 如何对字符串进行哈希处理,以便在任何地方修改字符时它几乎不会改变?

java - 如何使用 Java 流查找不同对象的计数

java - 插入可连接实体的数据始终为空 - playframework

javascript - 通过 javascript 访问 JSON