2016-10-14 15 views
0

我從API收到以下JSON:com.fasterxml.jackson.databind.JsonMappingException而轉換JSON來對象

{ 
    "list": { 

    "responsibility": 
    { 
    "rolename" : "Regional Operation Director", 
    "organizationLevelValues":"32R", 
    "otherCMDLevelValues":"MGT," 
    }, 
    "responsibility": 
    { 
    "rolename" : "Legal Representative", 
    "organizationLevelValues":"VALEO", 
    "otherCMDLevelValues":"MGT,RO04," 
    } 
    } 
} 

我試圖將其轉換成目標:

public class ActorResponsibilityResp { 
    private ActorResponsibilities list; 

    public ActorResponsibilities getList() { 
     return list; 
    } 

    public void setList(ActorResponsibilities list) { 
     this.list = list; 
    } 
} 

public class ActorResponsibilities { 
    private List<ActorResponsibility> responsibility; 

    public List<ActorResponsibility> getResponsibility() { 
     return responsibility; 
    } 

    public void setResponsibility(List<ActorResponsibility> responsibility) { 
     this.responsibility = responsibility; 
    } 
} 

public class ActorResponsibility { 
    @JsonProperty("rolename") 
    private String rolename; 
    @JsonProperty("organizationLevelValues") 
    private String organizationLevelValues; 
    @JsonProperty("otherCMDLevelValues") 
    private String otherCMDLevelValues; 

    public String getRolename() { 
     return rolename; 
    } 

    public void setRolename(String rolename) { 
     this.rolename = rolename; 
    } 

    public String getOrganizationLevelValues() { 
     return organizationLevelValues; 
    } 

    public void setOrganizationLevelValues(String organizationLevelValues) { 
     this.organizationLevelValues = organizationLevelValues; 
    } 

    public String getOtherCMDLevelValues() { 
     return otherCMDLevelValues; 
    } 

    public void setOtherCMDLevelValues(String otherCMDLevelValues) { 
     this.otherCMDLevelValues = otherCMDLevelValues; 
    } 
} 

當我使用com.fasterxml.jackson.databind.ObjectMapper.readvalue(reponseStr,ActorResponsibilityResp.class)時,我得到以下異常:

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize  instance of java.util.ArrayList out of START_OBJECT token at [Source: 
{ 
    "list": { 

     "responsibility": 
     { 
     "rolename" : "Regional Operation Director", 
     "organizationLevelValues":"32R", 
     "otherCMDLevelValues":"MGT," 
     }, 
    "responsibility": 
     { 
     "rolename" : "Legal Representative", 
     "organizationLevelValues":"VALEO", 
     "otherCMDLevelValues":"MGT,RO04," 
     } 
    } 
}; line: 4, column: 5] (through reference chain: com.valeo.vs.model.ActorResponsibilityResp["list"]->com.valeo.vs.model.ActorResponsibilities["responsibility"]) 
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164) 
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:691) 
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:685) 
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:256) 
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:214) 
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:204) 
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23) 
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:525) 
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:99) 
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:242) 
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118) 
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:525) 
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:99) 
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:242) 
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:118) 
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2993) 
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2098) 

回答

1

這是一個無效的JSON,因爲多次發生導致密鑰重複的'責任'屬性。你的代碼似乎很完美。

{ 
     "list": { 

     "responsibility": [ 
     { 
     "rolename" : "Regional Operation Director", 
     "organizationLevelValues":"32R", 
     "otherCMDLevelValues":"MGT," 
     }, 
     { 
     "rolename" : "Legal Representative", 
     "organizationLevelValues":"VALEO", 
     "otherCMDLevelValues":"MGT,RO04," 
     } 
     ] 
    } 
} 

檢查您的JSON是否正確,使用像http://jsonlint.com/#

任何在線工具