Когда вы получаете вывод JSON от API, вы можете напрямую использовать вывод и десериализовать его.Вам не нужно иметь escape-символы в строке json.Они необходимы, когда вы сами определяете строку json.Например, String s = "{\"current_user_url\"}";
, потому что это компилятор, который заставляет вас избегать его.Но вывод json, который вы получаете как ответ API, находится в переменной, и если тип переменной и назначаемый ей контент совпадают, компилятор не может с этим справиться.
Теперь я использовалтолько ваш код, но использовал общедоступный API Github, и я могу десериализовать выходной JSON без какой-либо операции с выходной строкой, как, например, экранирование ""
или изменение "" to ''
.
class Github {
private String current_user_url;
private String authorizations_url;
public String getCurrent_user_url() {
return current_user_url;
}
public void setCurrent_user_url(String current_user_url) {
this.current_user_url = current_user_url;
}
public String getAuthorizations_url() {
return authorizations_url;
}
public void setAuthorizations_url(String authorizations_url) {
this.authorizations_url = authorizations_url;
}
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
String line = "";
String jsonString = "";
URL myUrl = new URL("https://api.github.com");
BufferedReader reader = new BufferedReader( new InputStreamReader(myUrl.openStream()) );
while( (line = reader.readLine()) != null ){
//System.out.println(line);
jsonString += line;
}
reader.close();
System.out.println(jsonString);
Gson g = new Gson();
Github gi = g.fromJson(jsonString, Github.class);
System.out.println(gi.getAuthorizations_url());
System.out.println(gi.getCurrent_user_url());
}
Я также определилДжонс сам натянул и десериализировал его с помощью GSON.В этом случае при определении строки json мне нужно было избегать двойных кавычек, как показано ниже:
String s = "{\"current_user_url\":\"http://test.com/user\"}";
Gson g = new Gson();
Github gi = g.fromJson(s, Github.class);
System.out.println(gi.getCurrent_user_url());
Кроме того, строки JSON должны содержать только double quotes
, и если вы используете single quotes
, вы можете получитьошибка.