Trong khi giải kích hoạt, Gson có thể mong đợi một đối tượng JSON nhưng nó có thể tìm thấy một mảng JSON. Vì nó không thể chuyển đổi từ cái này sang cái kia nên nó có thể gặp lỗi là " JsonSyntaxException:java.lang.IllegalStateException:Dự kiến là BEGIN_OBJECT nhưng là BEGIN_ARRAY "trong thời gian chạy.
Ví dụ
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; }
Đầu ra
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)
Chúng tôi cần giải quyết vấn đề này bằng cách thay đổi Loại POJO thành kiểu Bộ sưu tập hoặc Mảng. Trong ví dụ dưới đây, chúng tôi có thể sử dụng Danh sách bộ sưu tập trong lớp POJO của chúng tôi.
Ví dụ
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 + "]"; } }
Đầu ra
Software [employees=[Employee [name=Raja Ramesh, technology=Java]]]