如何解决将 JSON 映射到包含 map
我有一个这样的 json,它嵌套在其中一个字段中 -
{
"templateid": "email_verified_template","templatevalues": {
"patient_name": "nprj09”,"date": “Monday,3rd May,10:37:23 PM”,},"emailAddress": “nprj09@test.com”,}
我创建了一个自定义类,
public class EmailTemplate implements Serializable {
private String templateid;
private Map<String,String> templatevalues;
private String emailAddress;
---
}
在我的服务类中,我正在读取 json 并将其映射到我的 EmailTemplate 类中,但映射失败。我可以在这里使用什么?
ObjectMapper mapper = new ObjectMapper();
try {
notificationVo = mapper.readValue(msg,EmailNotificationVO.class);
异常:
An Exception has occurred..com.fasterxml.jackson.databind.JsonMappingException: Illegal unquoted character ((CTRL-CHAR,code 13)): has to be escaped using backslash to be included in string value
at [Source: (String)"{
"templateid": "email_verified_template",10:37:23 PM”
我尝试添加
mapper.configure(
JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(),true
);
但这也没有用。
解决方法
要映射的代码很好。只需正确输入 JSON。
,首先,正如 Most Needed Rabbit 所指出的,JSON 中的引号是不正确的。更正一下,这是有效的代码。
输入字符串:
String input = "{\n" +
"\t\"templateid\": \"email_verified_template\",\n" +
"\t\"templatevalues\": {\n" +
"\t\t\"patient_name\": \"nprj09\",\n" +
"\t\t\"date\": \"Monday,3 rd May,10: 37: 23 PM\"\n" +
"\t},\n" +
"\t\"emailAddress\": \"nprj09@test.com\"\n" +
"}";
读取JSON的代码:
ObjectMapper mapper = new ObjectMapper();
try {
EmailTemplate email = mapper.readValue(input,EmailTemplate.class);
System.out.println(email.getTemplatevalues().get("patient_name"));
}
catch(Exception e)
{
e.printStackTrace();
}
带有 getter 和 setter 的简单 POJO:
class EmailTemplate implements Serializable {
private String templateid;
private Map<String,String> templatevalues;
private String emailAddress;
public String getTemplateid() {
return templateid;
}
public void setTemplateid(String templateid) {
this.templateid = templateid;
}
public Map<String,String> getTemplatevalues() {
return templatevalues;
}
public void setTemplatevalues(Map<String,String> templatevalues) {
this.templatevalues = templatevalues;
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
}
它通过将 patient_name
编组到 POJO 并从对象内部读取它来打印它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。