我收到的JSON对象是这样的。
{
"Question279":{
"ID":"1",
"Contents":"Some texts here",
"User":"John",
"Date":"2016-10-01"
}
我需要将JSON映射到以下java bean。
public class Question {
@JsonProperty("ID")
private String id;
@JsonProperty("Contents")
private String contents;
@JsonProperty("User")
private String user;
@JsonProperty("Date")
private LocalDate date;
//some getters and setters are skipped...
}
另请注意,上述JSON对象Question279
中的第一个级别并不总是相同,它取决于用户获取JSON所提供的参数。我无法改变这种情况。
目前我正在使用类似的东西。
ObjectMapper mapper = new ObjectMapper();
String json = "{'Question279':{'ID':'1', 'Contents':'Some texts here', 'User':'John', 'Date':'2016-10-01'}"
Question question = mapper.readValue(json, Question.class);
但是它不起作用,当然,我得到了一个Question
课程,里面装满了null
。在这种情况下如何使它工作?
答案 0 :(得分:2)
我建议您为ObjectMapper
为每个案例创建一个专门的ObjectReader
:
String questionKey = "Question279"; // Generate based on parameter used to obtain the json
ObjectReader reader = mapper.reader().withRootName(questionKey).forType(Question.class);
Question q = reader.readValue(json);
... // Work with question instance
答案 1 :(得分:2)
您的JSON定义了集合的映射,因此您可以这样解析它:
ObjectMapper mapper = new ObjectMapper();
Map<String, Question> questions = mapper.readValue(json,
new TypeReference<Map<String, Question>>(){});
Question question = questions.get("Question279");
new TypeReference<Map<String, Question>>(){}
定义了一个扩展TypeReference<Map<String, Question>>
的匿名类。它的唯一目的是告诉Jackson它应该将JSON解析为String-&gt; Question对的映射。解析JSON后,您需要从地图中提取所需的问题。