2017-06-02 37 views
0

击中我下面的代码例外在URIJSONTokener:一个JSONObject文本必须以 '{'

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(); 
    } 

异常使用JSON如下...

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) 

是否有其他我可以采取适合的方法吗?

+1

'inputStream.toString()'很肯定这不是你从'InputStream'中读取的方式。 –

+0

InputStream toString不会给你正确的响应。检查如何从inputStream中读取 –

回答

1

请务必阅读的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); 
    } 
} 

afteron你可以使用它:

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

出于某种原因,IDE在“我无法解析符号UTF8”时尝试此操作 – user3303266

+0

您使用哪个Java版本? – aexellent

+0

并确保导入正确的类:)'java.nio.charset.StandardCharsets' – aexellent

相关问题