java - 使用 JSON-B 反序列化 JSON 数组

标签 java json jakarta-ee jsonb-api

我正在尝试使用 JSONB 反序列化 JSON 数组。

JSON

[
  {
    "id": "1",
    "animal": "dog",
    "age": "3"
  },
  {
    "id": "2",
    "animal": "cat",
    "age": "5"
  }
]

Controller

Jsonb jsonb = JsonbBuilder.create();    
Animal animal;
AnimalsList animalsList;

public AnimalsList getAnimals() {
    try {
        animalsList = jsonb.fromJson("[{\"id\":\"1\",\"animal\":\"dog\",\"age\":\"3\"},{\"id\":\"2\",\"animal\":\"cat\",\"age\":\"5\"}]", AnimalsList.class);
    } catch (JSONException ex) {
        Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
    }
    return animalsList;
}

动物列表

public class AnimalsList implements Serializable{

    private List<Animal> list;

    public AnimalsList() {
    }

    public AnimalsList(List<Animal> list) {
        this.list = list;
    }

    // getter & setter
}

动物

public class Animal implements Serializable{

    private int id;
    private String animal;
    private int age;

    public Animal() {
    }

    public Animal(int id, String animal, int age) {
        this.id = id;
        this.animal = animal;
        this.age = age;
    }

    // getter & setter
}

但是我得到以下错误:

javax.json.bind.JsonbException: Can't deserialize JSON array into: class com.model.AnimalsList

最佳答案

Arnaud 的评论中所写, 这个guide显示解决方案:

List<Dog> dogs = new ArrayList<>();
dogs.add(falco);
dogs.add(cassidy);

// Create Jsonb and serialize
Jsonb jsonb = JsonbBuilder.create();
String result = jsonb.toJson(dogs);

// Deserialize back
dogs = jsonb.fromJson(result, new ArrayList<Dog>(){}.getClass().getGenericSuperclass());

关于java - 使用 JSON-B 反序列化 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57462695/

相关文章:

java - 注入(inject)多个 EJB

java - 使用 GWT 将 Java 编译为 Javascript 库

java - 在图像上放置 JavaFX 文本

java - 从 ByteBuffer 到双数组

html - 根据使用 json 选择的语言更改 html 页面的内容

java - 如何将 JSON URL 中的字符串结果拆分为单个 java 对象

arrays - PostgreSQL 数组(row_to_json()) : How to stop array() functions from adding "quotes to strings and escape\existing " quotes

java - hibernate映射xml有什么问题?

tomcat - 适用于 AWS 云的最佳应用服务器容器

Java向USB串口写入字节