【发布时间】:2020-08-27 20:34:49
【问题描述】:
我有以下通过 HTTP 请求解析的 JSON 对象。
{
"firstName": "User",
"lastName": "Test",
"emailId": "testnew@gmail.com",
"formsAndQuestions": {
"Form1": {
"Question1": {
"value": "NEVER",
"isBoolean": false
},
"Question2": {
"value": "YES"
}
},
"Form2": {
"Question1": {
"value": "OTHER"
}
}
}
}
表单对象可以是动态的。因此,我在我的 Java 类中使用以下变量反序列化它。
Map<String, Map<String, Map<String, String>>> forms;
然后我将通过下面的复杂循环来迭代这些并读取答案值。
for (Map.Entry<String, Map<String, Map<String, String>>> entry : input.formsAndQuestions().get().entrySet()) {
logger.log("Form: " + entry.getKey());
for (Map.Entry<String, Map<String, String>> entry1 : entry.getValue().entrySet()) {
logger.log("Question: " + entry1.getKey());
for (Map.Entry<String, String> entry2 : entry1.getValue().entrySet()) {
logger.log("key: " + entry2.getKey());
logger.log("value: " + entry2.getValue());
}
}
}
有没有更好的方法来做到这一点?循环似乎很复杂。我不想创建用于反序列化 json 的 Java 对象类,因为“formsAndQuestions”对象可以添加/删除多个表单,每个表单添加或删除多个问题/答案。
非常感谢有关此方法的任何反馈。
【问题讨论】:
-
可以使用Jackson库的JsonNode代替Map。请参阅此链接baeldung.com/jackson-json-to-jsonnode 选项#4。
标签: java json jackson deserialization json-deserialization