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

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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

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

1、优雅地输出JSON Object

下面是一个将Object利用Jackson转换为JSON String的例子。

User user =newUser();

ObjectMapper mapper=newObjectMapper();

System.out.println(mapper.writeValueAsString(user));

但是输出结果确实非常紧凑的,一点儿都不美观。

为了能使他优雅地打印,使用ObjectMapper类的writerWithDefaultPrettyPrinter()方法。

ObjectMapper mapper =newObjectMapper();

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")publicclassAdminController {

@RequestMapping(method=RequestMethod.GET)publicModelAndView index() {

String test= "{\"age\":29,\"messages\":[\"msg 1\",\"msg 2\",\"msg 3\"],\"name\":\"mkyong\"}";

Object json= mapper.readValue(test, Object.class);

ModelAndView modelandView=newModelAndView("viewname");

modelandView.addObject("output", mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json));returnmodelandViewl;

}

}

在JSP页面里面,使用: <pre>${output}</pre>

Note: 本文使用writerWithDefaultPrettyPrinter(),老一套的defaultPrettyPrintingWriter()已经deprecated。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航