2017-04-14 62 views
0

鑑於以下JSON文件:com.fasterxml.jackson.databind.JsonMappingException:無法反序列化TestAcceptanceCriteria的實例進行START_ARRAY令牌

[ 
     {"name":"test_12345_54321", 
       "acceptanceCriteria": 
        [ 
        { 
         "given":"I am a developer", 
         "and":"I have some test case to write", 
         "when":"I run my test", 
         "then":"I get a report generated about its details." 
        } 
        ] 
     }, 
     {"name":"test_2", 
       "acceptanceCriteria": 
        [ 
        { 
         "given":"I am a developer test 2", 
         "and":"I have some test case to write test 2", 
         "when":"I run my test test 2", 
         "then":"I get a report generated about its details.2" 
        } 
        ] 
     } 
    ] 

我想用傑克遜對象映射一個JSON文件中訪問值。 如下:

File jsonFile = new File("results/acceptanceCriteria.json"); 

     ObjectMapper mapper = new ObjectMapper(); 
     TestAcceptanceCriteria acceptanceCriteria = null; 
     acceptanceCriteria = mapper.readValue(jsonFile, TestAcceptanceCriteria.class); 
     System.out.println(acceptanceCriteria.getAcceptanceCriteria()); 

每次我嘗試訪問任何變量,我得到以下錯誤:

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of file.readers.TestAcceptanceCriteria out of START_ARRAY token at [Source: results\acceptanceCriteria.json; line: 1, column: 1] at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270) at com.fasterxml.jackson.databind.DeserializationContext.reportMappingException(DeserializationContext.java:1234) at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1122) at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1075) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromArray(BeanDeserializerBase.java:1374) at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:174) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:150) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3798) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2740) at file.readers.AcceptanceCriteriaJsonReader.main(AcceptanceCriteriaJsonReader.java:51)

我班如下:

public class AcceptanceCriteria{ 
    private String given; 
    private String and; 
    private String when; 
    private String then; 

    public String getGiven(){ 
     return given; 
    } 
    public void setGiven(String given){ 
     this.given = given; 
    } 
    public String getAnd(){ 
     return and; 
    } 
    public void setAnd(String and){ 
     this.and = and; 
    } 
    public String getWhen(){ 
     return when; 
    } 
    public void setWhen(String when){ 
     this.when = when; 
    } 
    public String getThen(){ 
     return then; 
    } 
    public void setThen(String then){ 
     this.then = then; 
    } 
} 

...

import java.util.List; 
    public class TestAcceptanceCriteria { 
    private String name; 
    private List<AcceptanceCriteria> acceptanceCriteria; 

    public String getName(){ 
     return name; 
    } 
    public void setName(String name){ 
     this.name = name; 
    } 
    public List<AcceptanceCriteria> getAcceptanceCriteria(){ 
     return acceptanceCriteria; 
    } 
    public void setAcceptanceCriteria(List<AcceptanceCriteria> acceptanceCriteria){ 
     this.acceptanceCriteria = acceptanceCriteria; 
    } 
} 

回答

0

您正在試用ng將實體數組反序列化爲單個對象,導致問題的原因。讓我們試試:

List<TestAcceptanceCriteria> acceptanceCriteria = null; 
acceptanceCriteria = mapper.readValue(json, new TypeReference<List<TestAcceptanceCriteria>>(){}); 
相關問題