2016-10-28 4 views
0

json을 소비하고 객체로 변환하는 코드를 작성 중이다. 예를 들어 내 json 응답은 다음과 같습니다. -객체의 Arrya에 JSON 응답을 비 직렬화 할 수 없다.

String carJson = "{\"brand \ ": Mercedes \", \ "doors \": 5} {\ "brand \": \ "Tata \", \ "doors \": 4}]} ";

실제로 자동차의 배열.

나는 자바 객체로 역 직렬화 코드 아래에 작성했습니다 : -

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; 
     } } 

CarType은 다음과 같습니다 : -

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) 
+0

실제 문제는 무엇입니까? 오류가 있습니까? 필드가 null입니까? 실제로 문제가 무엇인지 알려주지 않았습니다. – rmlan

+0

예 오류가 발생합니다. 나는 그 질문을 갱신했다. 미안, 나는 그 부분을 놓쳤다. –

답변

1

당신은 잘못된 유형으로 직렬화하려고를 :

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

원하는 목록는 자동차에

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

해야한다 수업에 게시했습니다.

관련 문제