Java JSON解析为我提供空数据
我正在使用Jackson库尝试解析我的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
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会将classId
中的字段名称与JSONId
中的字段名称进行匹配。您能提供class QuestData的代码吗?我想您正在寻找:,如果这不能解决您的问题,它很可能位于您的POJO QuestData中,正如@Joram提到的那样,@Joram添加了POJOclass@sjahan我用来创建有问题的代码的链接。Id
必须大写吗?如果将JSON
中的id
和QuestData
类中的id
小写,则代码可以正常工作。