Computer >> Máy Tính >  >> Lập trình >> Java

Làm cách nào để giải quyết BEGIN_OBJECT được mong đợi nhưng lại là BEGIN_ARRAY bằng cách sử dụng Gson trong Java?


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]]]