当前位置: 首页 > 知识库问答 >
问题:

JSONMappingException:无法从START_ARRAY标记反序列化TestAcceptanceCriteria实例

勾海超
2023-03-14

给定以下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对象映射器访问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());
 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;
    }
}

共有1个答案

秦哲瀚
2023-03-14

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

List<TestAcceptanceCriteria> acceptanceCriteria = null;
acceptanceCriteria = mapper.readValue(json, new TypeReference<List<TestAcceptanceCriteria>>(){});
 类似资料: