Jackson如何使JSON輸出變得優雅?


本篇文章翻譯自: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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM