如何格式化输出JSON数据

前言:

由于我们在开发、测试阶段,为了方便看日志,需要将原本的压缩json进行格式化显示,便于我们在日常开发过程中很直观的看到我们想要打印的信息,以及数据的层级关系。下面我们梳理了日常用的最多的两种 json 工具进行罗列

一、Jackson

进入maven依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.6</version>
</dependency>

1、常规压缩打印

@Test
public void jackson01() throws JsonProcessingException {
    PersonData pd = new PersonData(123456L, "小明", "北京", new Date());

    ObjectMapper mapper = new ObjectMapper();
    System.out.println(mapper.writeValueAsString(pd));
}

结果:

{"id":123456,"name":"小明","address":"北京","today":1624448577901}

2、格式化打印

@Test
public void jackson02() throws JsonProcessingException {
    PersonData pd = new PersonData(123456L, "小明", "北京", new Date());

    ObjectMapper mapper = new ObjectMapper();
    System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(pd));
}

结果:

{
  "id" : 123456,
  "name" : "小明",
  "address" : "北京",
  "today" : 1624448606828
}

3、对于本身为 String 类型,直接输出,不会予以格式化

@Test
public void jackson03() throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();

    String str = "{\"id\":123456,\"name\":\"小明\",\"address\":\"北京\",\"today\":1624448577901}";
    System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(str));
}

结果:

"{\"id\":123456,\"name\":\"小明\",\"address\":\"北京\",\"today\":1624448577901}"

4、使用 @JsonFormat 格式化时间

我们可以有两种用法(我知道的),在对象属性上,或者在属性的 getter 方法上

/**更新时间  用户可以点击更新,保存最新更新的时间。**/
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date today;
@Test
public void jackson04() throws JsonProcessingException {
    PersonData pd = new PersonData(123456L, "小明", "北京", new Date());

    ObjectMapper mapper = new ObjectMapper();
    System.out.println(mapper.writeValueAsString(pd));
}

结果:

{"id":123456,"name":"小明","address":"北京","today":"2021-06-23 11:46:52"}

5、@JsonFormat 相差8小时问题

第四个例子,直接使用 @JsonFormat,在我们中国来讲和我们的北京时间,会相差8个小时,因为我们是东八区(北京时间)所以我们在格式化的时候要指定时区(timezone ),也就是增加一个属性,timezone="GMT+8" 即可

/**更新时间  用户可以点击更新,保存最新更新的时间。**/
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date today;
@Test
public void jackson05() throws JsonProcessingException {
    PersonData pd = new PersonData(123456L, "小明", "北京", new Date());

    ObjectMapper mapper = new ObjectMapper();
    System.out.println(mapper.writeValueAsString(pd));
}

结果:

{"id":123456,"name":"小明","address":"北京","today":"2021-06-23 19:51:18"}

二、Fastjson

maven依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.54</version>
</dependency>

1、常规压缩打印

@Test
public void fastjson01(){
    PersonData pd = new PersonData(123456L, "小明", "北京", new Date());
    System.out.println(JSON.toJSONString(pd));
}

结果:

{"address":"北京","id":123456,"name":"小明","today":1624448483426}

2、格式化打印

@Test
public void fastjson02(){
    PersonData pd = new PersonData(123456L, "小明", "北京", new Date());
    System.out.println(JSON.toJSONString(pd, true));		//也可以用 toJSONString(object, SerializerFeature.PrettyFormat) 替换
}

结果:

{
	"address":"北京",
	"id":123456,
	"name":"小明",
	"today":1624448463986
}

3、内容和时间值,同时格式化

@Test
public void fastjson03(){
    PersonData pd = new PersonData(123456L, "小明", "北京", new Date());
    System.out.println(JSON.toJSONStringWithDateFormat(pd, JSON.DEFFAULT_DATE_FORMAT, SerializerFeature.PrettyFormat));
}

结果:

{
	"address":"北京",
	"id":123456,
	"name":"小明",
	"today":"2021-06-23 19:38:35"
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值