Java JSON解析为我提供空数据

Java JSON解析为我提供空数据,java,json,jackson,Java,Json,Jackson,我正在使用Jackson库尝试解析我的JSON文件。我的JSON实际上是JSON对象的数组: JSON数组: [ { "Id" : "0", "name" : "John" }, { "Id" : "1", "name" : "Doe" } ] @JsonIgnoreProperties(ignoreUnknown = true) public class QuestData { private String Id; private String na

我正在使用Jackson库尝试解析我的
JSON
文件。我的JSON实际上是
JSON
对象的数组

JSON数组:

[
 {
   "Id" : "0",
  "name" : "John"
},
{
   "Id" : "1",
   "name" : "Doe"
}
]
@JsonIgnoreProperties(ignoreUnknown = true)
public class QuestData {
    private String Id;

    private String name;

    public String getId() {
        return Id;
    }

   public String getName() {
       return name;
   }
}
  private void parseJSON(File jsonFile) {
        try {
            byte[] jsonData = Files.readAllBytes(jsonFile.toPath());
            System.out.println(new String(jsonData));

            ObjectMapper mapper = new ObjectMapper();

            List<QuestData> questDataList = mapper.readValue(jsonData, mapper.getTypeFactory().constructCollectionType(List.class, QuestData.class));
            System.out.println("Read values: " + questDataList.get(0).getId());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
POJO类:

[
 {
   "Id" : "0",
  "name" : "John"
},
{
   "Id" : "1",
   "name" : "Doe"
}
]
@JsonIgnoreProperties(ignoreUnknown = true)
public class QuestData {
    private String Id;

    private String name;

    public String getId() {
        return Id;
    }

   public String getName() {
       return name;
   }
}
  private void parseJSON(File jsonFile) {
        try {
            byte[] jsonData = Files.readAllBytes(jsonFile.toPath());
            System.out.println(new String(jsonData));

            ObjectMapper mapper = new ObjectMapper();

            List<QuestData> questDataList = mapper.readValue(jsonData, mapper.getTypeFactory().constructCollectionType(List.class, QuestData.class));
            System.out.println("Read values: " + questDataList.get(0).getId());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
解析JSON:

[
 {
   "Id" : "0",
  "name" : "John"
},
{
   "Id" : "1",
   "name" : "Doe"
}
]
@JsonIgnoreProperties(ignoreUnknown = true)
public class QuestData {
    private String Id;

    private String name;

    public String getId() {
        return Id;
    }

   public String getName() {
       return name;
   }
}
  private void parseJSON(File jsonFile) {
        try {
            byte[] jsonData = Files.readAllBytes(jsonFile.toPath());
            System.out.println(new String(jsonData));

            ObjectMapper mapper = new ObjectMapper();

            List<QuestData> questDataList = mapper.readValue(jsonData, mapper.getTypeFactory().constructCollectionType(List.class, QuestData.class));
            System.out.println("Read values: " + questDataList.get(0).getId());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
private void parseJSON(文件jsonFile){
试一试{
byte[]jsonData=Files.readAllBytes(jsonFile.toPath());
System.out.println(新字符串(jsonData));
ObjectMapper mapper=新的ObjectMapper();
List questDataList=mapper.readValue(jsonData,mapper.getTypeFactory().constructionCollectionType(List.class,QuestData.class));
System.out.println(“读取值:”+questDataList.get(0.getId());
}捕获(IOE异常){
e、 printStackTrace();
}
}
我的第一个print语句将正确的Json数据打印回来(作为字符串)

但下一个打印语句是
NULL
。我甚至试着翻阅整个列表,看看是否有不是空的,但没有运气的东西


我不知道我在这里做错了什么。

只需将
@JsonProperty
注释添加到
QuestData
类中的
Id
属性:

@JsonIgnoreProperties(ignoreUnknown = true)
public class QuestData {

    @JsonProperty("Id")
    private String Id;

    private String name;

    public String getId() {
        return Id;
    }

   public String getName() {
       return name;
   }
}

默认情况下,Jackson将使用setter方法来设置字段。因此,添加如下setter:

@JsonProperty("Id")  // otherwise Jackson expects id for setId
public void setId(String id) {
    Id = id;
}
或者,告诉Jackson使用此配置查找字段:

mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);

在这种情况下,Jackson会将class
Id
中的字段名称与JSON
Id

中的字段名称进行匹配。您能提供class QuestData的代码吗?我想您正在寻找:,如果这不能解决您的问题,它很可能位于您的POJO QuestData中,正如@Joram提到的那样,@Joram添加了POJOclass@sjahan我用来创建有问题的代码的链接。
Id
必须大写吗?如果将
JSON
中的
id
QuestData
类中的
id
小写,则代码可以正常工作。