java - 无法反序列化对对象数组的 JSON 响应

标签 java rest jersey jackson

我正在编写一个使用 json 并将其转换为 Objects 的代码。 例如,我的 json 响应如下:-

String carJson ="{\"car\": [{\"brand\":\"Mercedes\",\"doors\": 5 },{\"brand\":\"Tata\",\“门\”:4 }] }“;

实际上是一系列汽车。

我编写了下面的代码将其反序列化为 Java 对象:-

    ObjectMapper objectMapper = new ObjectMapper();

            objectMapper.enable(SerializationFeature.INDENT_OUTPUT);

            List<Car> jsonToCarList = objectMapper.readValue(carJson, new TypeReference<List<Car>>() {}); 
            jsonToCarList.forEach(System.out::println);

这是我的汽车类别:-

public class Car {        
            @JsonProperty("car")
            private List<CarType> car;

        public Car(@JsonProperty("car") List<CarType> car) {
            this.car = car;
        }

        @JsonProperty("car")
        public List<CarType> getCar() {
            return car;
        } }

汽车类型如下:-

class CarType {

@JsonProperty("brand")
private String brand;

@JsonProperty("doors")
private String doors;

public CarType(String brand, String doors) {
    this.brand = brand;
    this.doors = doors;
}

public CarType() {

}

@JsonProperty("brand")
public String getBrand() {
    return brand;
}

@JsonProperty("doors")
public String getDoors() {
    return doors;
}
}

这里出了什么问题,我不明白。我收到以下错误:-

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
 at [Source: {"car" : [{ "brand" : "Mercedes", "doors" : 5 },{ "brand" : "Tata", "doors" : 4 }] }; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:762)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:758)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:275)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:216)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:206)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3066)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2168)

最佳答案

您正在尝试反序列化为错误的类型:

List<Car> jsonToCarList = objectMapper.readValue(carJson, new TypeReference<List<Car>>() {});

应该是

Car jsonToCar = objectMapper.readValue(carJson, Car.class);

您想要的列表位于您发布的 Car 类中。

关于java - 无法反序列化对对象数组的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40309616/

相关文章:

java - 创建新的 GSCService 实例运行时错误

java - 如果在@BeforeEach 方法中抛出异常,@AfterEach 是否仍然运行

java - 如何制作不透明的 Activity ?

java - JasperReports - 如何在 Java 中使用远程 JSON 数据报告运行报告

http - 使用 HEAD 请求揭示 protected 资源的存在是否是 RESTful?

java - Jersey ClientBuilder.newClient() : source not found

java - 编织外部 jar 中的 Aspectj

rest - 保护 Smooch Webhook 的安全

java - Jersey 在解析损坏的请求时抛出 NullPointerException

Java Jersey PUT 方法和工作客户端