将字符串转换为Java中的Map

时间:2017-04-26 07:05:54

标签: java json hashmap jackson

我正在使用jackson Objectmapper将对象转换为字符串,并将其作为varchar2.My代码保存到数据库中

AuditDataLog dataLog = new AuditDataLog();
ObjectMapper mapper = new ObjectMapper();
dataLog.setData(mapper.writeValueAsString(obj));

它作为Varchar2保存到数据库中。但是当我从数据库中检索此值并希望使用ObjectMapper将其转换为Map时,它无法执行此操作。它会像这样给出异常

"com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [map type; class java.util.HashMap"

这是我的代码

Map map = mapper.readValue(obj,HashMap.class));

obj是数据库值,它是string.this是我想要转换map的字符串。

"\"MerOrder\":{\"cusAccPartyId\":\"4632\",\"cusAccParty\":{\"fullName\":\"Kariban\"},\"merAccPartyId\":\"4800\",\"merAccParty\":{\"fullName\":\"Golam Sarwer\"},\"season\":\"a455\",\"tfReceiveDate\":\"26 Apr 2017\",\"styleName\":\"a123\",\"styleNo\":\"s345\",\"sizeRange\":\"1\",\"merVariantValue\":{\"name\":\"XL-XS\"}}"

我该怎么办?

1 个答案:

答案 0 :(得分:0)

它失败的原因是因为您尝试反序列化的String不是有效的json,您需要将其包装成花括号以使其成为有效的json 。下面应该可以正常工作:

String s = "\"MerOrder\":{\"cusAccPartyId\":\"4632\",\"cusAccParty\":{\"fullName\":\"Kariban\"},\"merAccPartyId\":\"4800\",\"merAccParty\":{\"fullName\":\"Golam Sarwer\"},\"season\":\"a455\",\"tfReceiveDate\":\"26 Apr 2017\",\"styleName\":\"a123\",\"styleNo\":\"s345\",\"sizeRange\":\"1\",\"merVariantValue\":{\"name\":\"XL-XS\"}}";
ObjectMapper mapper = new ObjectMapper();
HashMap value = mapper.readValue("{" + s + "}", HashMap.class);
System.out.println(value);