【问题标题】:com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of TestAcceptanceCriteria out of START_ARRAY tokencom.fasterxml.jackson.databind.JsonMappingException:无法从 START_ARRAY 令牌中反序列化 TestAcceptanceCriteria 的实例
【发布时间】:2017-09-10 22:26:01
【问题描述】:

给定以下 JSON 文件:

 [
      {"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"
                     }
                   ]
        }
    ]

我正在尝试使用 Jackson Object Mapper 访问 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: 不能 反序列化 file.readers.TestAcceptanceCriteria 的实例 [来源:results\acceptanceCriteria.json; 处的 START_ARRAY 令牌;线: 1、栏目:1]在 com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:270) 在 com.fasterxml.jackson.databind.DeserializationContext.reportMappingException(DeserializationContext.java:1234) 在 com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1122) 在 com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1075) 在 com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromArray(BeanDeserializerBase.java:1374) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:174) 在 com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:150) 在 com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3798) 在 com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2740) 在 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;
    }
}

【问题讨论】:

    标签: java json parsing jackson objectmapper


    【解决方案1】:

    您正在尝试将实体数组反序列化为单个对象,这会导致问题。让我们试试:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 2016-07-30
      • 2015-03-10
      • 2019-10-25
      • 2015-12-24
      • 2018-12-03
      相关资源
      最近更新 更多