ในขณะที่ทำการดีซีเรียลไลซ์ Gson สามารถคาดหวังวัตถุ JSON แต่สามารถค้นหาอาร์เรย์ JSON ได้ เนื่องจากไม่สามารถแปลงจากอันหนึ่งเป็นอีกอันหนึ่ง จึงสามารถแสดงข้อผิดพลาดเป็น "JsonSyntaxException:java.lang.IllegalStateException:คาดหวัง BEGIN_OBJECT แต่เป็น BEGIN_ARRAY " ณ รันไทม์
ตัวอย่าง
import com.google.gson.Gson;
public class GsonErrorTest {
public static void main(String args[]) throws Exception {
String json = "{\"employee\":[{\"name\":\"Raja Ramesh\", \"technology\":\"java\"}]}";
Gson gson = new Gson();
Software software = gson.fromJson(json, Software.class);
System.out.println(software);
}
}
class Software {
Employee employee;
}
class Employee {
String name;
String technology;
} ผลลัพธ์
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 14 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)at com.google.gson.Gson.fromJson(Gson.java:795) at com.google.gson.Gson.fromJson(Gson.java:761) at com.google.gson.Gson.fromJson(Gson.java:710) at com.google.gson.Gson.fromJson(Gson.java:682) at BeginObjectError.main(BeginObjectError.java:7) Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 14 at com.google.gson.stream.JsonReader.expect(JsonReader.java:339) at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:322) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165)
เราต้องแก้ไขโดยเปลี่ยน ประเภท POJO เป็น ประเภทคอลเล็กชันหรืออาร์เรย์ ในตัวอย่างด้านล่าง เราสามารถใช้ List คอลเลกชันในชั้นเรียน POJO ของเรา
ตัวอย่าง
import java.util.List;
import com.google.gson.Gson;
public class GsonListTest {
public static void main(String args[]) throws Exception {
String jsonString = "{\"employees\":[{\"name\":\"Raja Ramesh\", \"technology\":\"Java\"}]}";
Gson gson = new Gson();
Software software = gson.fromJson(jsonString, Software.class);
System.out.println(software);
}
}
class Software {
List<Employee> employees;
@Override
public String toString() {
return "Software [employees=" + employees + "]";
}
}
class Employee {
String name;
String technology;
@Override
public String toString() {
return "Employee [name=" + name + ", technology=" + technology + "]";
}
} ผลลัพธ์
Software [employees=[Employee [name=Raja Ramesh, technology=Java]]]