Jackson如何使JSON输出变得优雅?
1、优雅地输出JSON Object
下面是一个将Object利用Jackson转换为JSON String的例子。
User user = new User(); ObjectMapper mapper = new ObjectMapper(); System.out.println(mapper.writeValueAsString(user));
但是输出结果确实非常紧凑的,一点儿都不美观。
为了能使他优雅地打印,使用ObjectMapper类的writerWithDefaultPrettyPrinter()方法。
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user));
结果(是不是优雅多了):
{ "age" : 29, "messages" : [ "msg 1", "msg 2", "msg 3" ], "name" : "mkyong" }
2、优雅地输出JSON String
这有一点点的棘手,再次使用ObjectMapper类的writerWithDefaultPrettyPrinter()方法。
String test =
"{\"age\":29,\"messages\":[\"msg
1\",\"msg 2\",\"msg
3\"],\"name\":\"mkyong\"}";
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(test));
上面代码运行后,我们发现他打印格式还是紧凑的,并不是我们想要的优雅类型。
"{\"age\":29,\"messages\":[\"msg
1\",\"msg 2\",\"msg
3\"],\"name\":\"mkyong\"}"
为了解决这问题,我们需要先将JSON String变成JSON Object,然后再利用 [1] 描述的方法,进行优雅地输出。
String test =
"{\"age\":29,\"messages\":[\"msg
1\",\"msg 2\",\"msg
3\"],\"name\":\"mkyong\"}";
Object json = mapper.readValue(test, Object.class);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json));
输出结果:
{ "age" : 29, "messages" : [ "msg 1", "msg 2", "msg 3" ], "name" : "mkyong" }
3、在JSP页面优雅地输出JSON String
@Controller @RequestMapping("/anything") public class AdminController { @RequestMapping(method = RequestMethod.GET) public ModelAndView index() { String test = "{\"age\":29,\"messages\":[\"msg 1\",\"msg 2\",\"msg 3\"],\"name\":\"mkyong\"}"; Object json = mapper.readValue(test, Object.class); ModelAndView modelandView = new ModelAndView("viewname"); modelandView.addObject("output", mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json)); return modelandViewl; } }
在JSP页面里面,使用: <pre>${output}</pre>
Note:
本文使用writerWithDefaultPrettyPrinter(),老一套的defaultPrettyPrintingWriter()已经deprecated。