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。
全部评论

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
我也曾抱有希望:说的好直白
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务