Я пытаюсь преобразовать строку ответа в объект Java (класса Temp) для дальнейшего манипулирования, но получаю ошибку ниже:
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 3 path $
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
at com.google.gson.Gson.fromJson(Gson.java:963)
at com.google.gson.Gson.from
import com.google.gson.*;
class Temp {
String name = "";
int age = 0;
String city = "";
}
class Scratch {
public static void main(String[] args) {
String response = " '{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}' ";
//convert response to Temp object
Gson g = new Gson();
Temp t = g.fromJson(response, Temp.class);
System.out.println(t.age);
}
}
ответ уже представляет собой строку JSON. Почему я не могу преобразовать его в объект Temp Class?
Сообщение об ошибке могло бы быть более полезным: «было STRING в строке 1, столбце 3» мало о чем говорит.




Строка вашего ответа начинается с ', а этого не должно быть. Также отмечу, что в той же строке есть ненужные пробелы.
Ваша строка ответа должна быть следующей:
String response = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
В самом ответе JSON есть ошибка. Строка ответа содержит дополнительные пробелы и одинарные кавычки, что не соответствует формату JSON.
Рассмотрим следующий исправленный код.
import com.google.gson.*;
class Temp {
String name = "";
int age = 0;
String city = "";
}
class Scratch {
public static void main(String[] args) {
String response = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
//convert response to Temp object
Gson g = new Gson();
Temp t = g.fromJson(response, Temp.class);
System.out.println(t.age);
}
}
«ответ уже представляет собой строку JSON». - Нет это не так. Действительный документ JSON не начинается с
'.