Home > Java > javaTutorial > How to solve 'Expected BEGIN_OBJECT but was BEGIN_ARRAY' error in Java using Gson?

How to solve 'Expected BEGIN_OBJECT but was BEGIN_ARRAY' error in Java using Gson?

WBOY
Release: 2023-08-28 21:45:02
forward
1502 people have browsed it

如何使用Gson在Java中解决“Expected BEGIN_OBJECT but was BEGIN_ARRAY”错误?

反序列化时,Gson 可以期望一个 JSON 对象,但它可以找到一个 JSON 数组。由于它无法从一种转换为另一种,因此它可能会在运行时抛出错误“JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was 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;
}
Copy after login

输出

Exception in thread "main"<strong> </strong>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)
Copy after login

我们需要通过将 POJO 类型更改为 集合或数组来解决此问题类型。 在下面的示例中,我们可以在 POJO 类中使用List集合。

示例

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 + "]";
   }
}
Copy after login

输出

Software [employees=[Employee [name=Raja Ramesh, technology=Java]]]
Copy after login

The above is the detailed content of How to solve 'Expected BEGIN_OBJECT but was BEGIN_ARRAY' error in Java using Gson?. For more information, please follow other related articles on the PHP Chinese website!

source:tutorialspoint.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template