如何解决将JSON文件中的日期值读取到Java HashMap中
我有一个如下所示的JSON文件:
{
"calendar": {
"dateToDayId": {
"2016-07-14": 290356,"2016-08-26": 380486,"2016-09-07": 417244,"2016-08-15": 354271,"2016-07-25": 311762
},"dishIdToMealId": {
"1228578": 474602,"1228585": 474602,"1228586": 474602,...... // more fields
}
我试图将Java中<date,number>
下的dateToDayId
对读入HashMap<Date,Long>
中。首先,我创建了一个JsonInfo
类,其中包含一个Calendar
类对象。 Calendar
类对象又包含所有类,包括DateToDayId
,DishToMealId
等。我的DateToDayId
类看起来像这样(我正在使用Jackson
来解析JSON文件):
package jsonfields;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import deserializers.CustomDateDeserializer;
import java.util.Date;
import java.util.TreeMap;
public class DateToDayId {
@JsonDeserialize(using = CustomDateDeserializer.class)
private TreeMap <Date,Long> dateToDayMappings;
public TreeMap<Date,Long> getDateToDayMappings() {
return dateToDayMappings;
}
public void setDateToDayMappings(TreeMap<Date,Long> dateToDayMappings) {
this.dateToDayMappings = dateToDayMappings;
}
@Override
public String toString() {
return "DateToDayId{" +
"dateToDayMappings=" + dateToDayMappings +
'}';
}
}
我的Main
类看起来像这样:
import java.io.*;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
try {
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("path\\to\\file\\test.json"));
JsonInfo jsonInfo = objectMapper.readValue(inputStreamReader,JsonInfo.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行它时,出现以下异常:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "2016-07-14" (class jsonfields.DateToDayId),not marked as ignorable (one known property: "dateToDayMappings"])
at [Source: (InputStreamReader); line: 1,column: 48] (through reference chain: JsonInfo["calendar"]->jsonfields.Calendar["dateToDayId"]->jsonfields.DateToDayId["2016-07-14"])
我该如何解决?
解决方法
您的类映射是错误的。您需要在dateToDayId
中使用变量名称为Calendar
的映射。下面的修改后的代码应该可以满足您的需求。
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.TreeMap;
public class JSONMapTest {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
try {
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("C:\\ws\\test\\test.json"));
JsonInfo jsonInfo = objectMapper.readValue(inputStreamReader,JsonInfo.class);
System.out.println(jsonInfo);
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class JsonInfo{
Calendar calendar;
public Calendar getCalendar() {
return calendar;
}
public void setCalendar(Calendar calendar) {
this.calendar = calendar;
}
}
class Calendar {
private TreeMap <Date,Long> dateToDayId;
public TreeMap<Date,Long> getDateToDayId() {
return dateToDayId;
}
public void setDateToDayId(TreeMap<Date,Long> dateToDayId) {
this.dateToDayId = dateToDayId;
}
@Override
public String toString() {
return "DateToDayId{" +
"dateToDayMappings=" + dateToDayId +
'}';
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。