将Java字符串转换为HashMap对象
我已经创建了一个将HashMap对象转换为字符串的应用程序,它工作正常,我面临的问题是我想再次将HashMap字符串转换回HasMap对象,当我尝试使用以下代码时,我得到了如下所示的异常将Java字符串转换为HashMap对象,java,json,jackson,Java,Json,Jackson,我已经创建了一个将HashMap对象转换为字符串的应用程序,它工作正常,我面临的问题是我想再次将HashMap字符串转换回HasMap对象,当我尝试使用以下代码时,我得到了如下所示的异常 Unexpected character ('u' (code 117)): was expecting double-quote to start field name 谁能告诉我一些解决方法吗 我的代码如下 Map<String,Object> map = new HashMap<Str
Unexpected character ('u' (code 117)): was expecting double-quote to start field name
谁能告诉我一些解决方法吗
我的代码如下
Map<String,Object> map = new HashMap<String,Object>();
map.put("userVisible", true);
map.put("userId", "1256");
ObjectMapper mapper = new ObjectMapper();
try {
map = mapper.readValue(map.toString(), new TypeReference<HashMap<String,Object>>(){});
System.out.println(map.get("userId"));
} catch (Exception e) {
e.printStackTrace();
}
更新代码
Map<String,Object> map = new HashMap<String,Object>();
map.put("userVisible", true);
map.put("userId", "1256");
ObjectMapper mapper = new ObjectMapper();
mapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
try {
map = mapper.readValue(map.toString(), new TypeReference<HashMap<String,Object>>(){});
System.out.println(map.get("userId"));
} catch (Exception e) {
e.printStackTrace();
}
Map Map=newhashmap();
map.put(“userVisible”,true);
map.put(“userId”,“1256”);
ObjectMapper mapper=新的ObjectMapper();
配置(Feature.ALLOW\u UNQUOTED\u FIELD\u NAMES,true);
试一试{
map=mapper.readValue(map.toString(),newTypeReference(){});
System.out.println(map.get(“userId”);
}捕获(例外e){
e、 printStackTrace();
}
之所以出现此错误,是因为JSON指定必须将字段名放在引号中,这与常规JavaScript对象不同。您可以通过配置ObjectMapper
让Jackson允许使用不带引号的字段名,以便:
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
更新
似乎一个更基本的问题是,您试图使用Java
toString()
将映射转换为字符串,并使用Jackson-JSON映射器将其转换回。这两种格式完全不同,如果您需要将字符串转换回对象,您可能首先应该使用Jackson映射器将映射转换为JSON。获取意外字符('='(代码61)):应使用冒号分隔字段名和值
@AlexMan String json=mapper.writeValueAsString(map)<代码>字符串mapStr=mapper.writeValueAsString(映射)代码>
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);