Java中将字符串转换为Map

3
我正在使用Jackson Objectmapper将一个对象转换为字符串,并将其保存到数据库中作为varchar2。我的代码如下:
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是数据库中的一个字符串值,我想将其转换为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\"}}"

我该怎么办?

3
你所保存的不是哈希表,而是一个类型为 MerOrder 的对象。 - Jens
1个回答

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接