Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java字符串转换为HashMap对象_Java_Json_Jackson - Fatal编程技术网

将Java字符串转换为HashMap对象

将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

我已经创建了一个将HashMap对象转换为字符串的应用程序,它工作正常,我面临的问题是我想再次将HashMap字符串转换回HasMap对象,当我尝试使用以下代码时,我得到了如下所示的异常

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