首页 > 学院 > 开发设计 > 正文

Jackson如何使JSON输出变得优雅?

2019-11-14 15:40:08
字体:
来源:转载
供稿:网友

本篇文章翻译自:How to enable PRetty print JSON output (Jackson)

在这篇文章中,我们将教你如何利用Jackson Library在控制台或者jsp页面优雅地输出JSON Object和JSON String。

 

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。

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表