任务是创建正确的Json字符串表示形式。有Map可能包含那个Json字符串的值。在写此映射到字符串映射器时,请转义新行并引用Json。
private String getJson() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
Map<String, String> map = new HashMap<>();
map.put("key1", "val1");
map.put("key2", "val2");
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);
}
返回:
{
"key1" : "val1",
"key2" : "val2"
}
代码
public String test() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
Map<String, String> map = new HashMap<>();
map.put("information", getJson());
String result = mapper.writeValueAsString(map);
System.out.println(result);
return result;
}
返回
{"information":"{\r\n \"key1\" : \"val1\",\r\n \"key2\" : \"val2\"\r\n}"}
但是test()方法是否可以像这样返回String:
{
"information": {
"key1": "val1",
"key2": "val2"
}
}
谢谢
答案 0 :(得分:0)
控制台输出中的问题。地图的值是字符串。如果要压缩输出,则可以在地图中使用键“信息”将“ key1”,“ key2”与地图放在一起,然后调用mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map)
答案 1 :(得分:0)
您必须先将JSON转换回地图,然后再将其放入“信息”地图。在您的代码中,它被视为字符串而不是映射。
因此,您必须将test()
方法更新为以下内容:
public static String test() throws IOException {
ObjectMapper mapper = new ObjectMapper();
TypeReference<HashMap<String, String>> typeRef = new TypeReference<HashMap<String, String>>() {};
Map<String, String> oldMap = mapper.readValue(getJson(), typeRef);
Map<String, Map<String, String>> map = new HashMap<>();
map.put("information", oldMap);
String result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);
System.out.println(result);
return result;
}
输出点是
{
"information" : {
"key1" : "val1",
"key2" : "val2"
}
}