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

问题描述 投票:2回答:1

我正在尝试使用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;
}

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
java json java-ee jsonb-api
1个回答
0
投票

如果不只限于使用JSON-B,可以通过TypeReferencing使用ObjectMapper进行。

private ObjectMapper objectMapper = new ObjectMapper();
List<Animal> animals = objectMapper.readValue(json , new TypeReference<List<Animal>>(){});
© www.soinside.com 2019 - 2024. All rights reserved.