方式一、使用阿里的FastJson

1、项目的pom.xml依赖

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

2、示例json字符串:

{"房产":[{"area":"220平米","address":"西虹市朱雀路888弄","price":"20000000元"},{"area":"356平米","address":"西虹市龙门路666弄","price":"40000000元"}],"基本信息":{"weight":"150斤","age":"36","username":"王多鱼","height":"175cm","hobby":"花钱"},"女朋友":[{"skill":"钢琴,舞蹈","name":"爱丽丝","weight":"95斤","age":"18","height":"165cm"},{"skill":"小提琴,唱歌,舞蹈","name":"安妮","weight":"100斤","age":"20","height":"170cm"}]}

3、示例代码

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;

/**
 * @Description: 格式化输出
 * @Auther: ztt
 * @Date: 2020/4/21 13:16
 */
public class Test {
    public static void main(String[] args) {
        String jsonStr = "{\"房产\":[{\"area\":\"220平米\",\"address\":\"西虹市朱雀路888弄\",\"price\":\"20000000元\"},{\"area\":\"356平米\",\"address\":\"西虹市龙门路666弄\",\"price\":\"40000000元\"}],\"基本信息\":{\"weight\":\"150斤\",\"age\":\"36\",\"username\":\"王多鱼\",\"height\":\"175cm\",\"hobby\":\"花钱\"},\"女朋友\":[{\"skill\":\"钢琴,舞蹈\",\"name\":\"爱丽丝\",\"weight\":\"95斤\",\"age\":\"18\",\"height\":\"165cm\"},{\"skill\":\"小提琴,唱歌,舞蹈\",\"name\":\"安妮\",\"weight\":\"100斤\",\"age\":\"20\",\"height\":\"170cm\"}]}\n";
        JSONObject jsonObject = JSONObject.parseObject(jsonStr);
        String formatStr = JSON.toJSONString(jsonObject, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue,
                SerializerFeature.WriteDateUseDateFormat);
        System.out.println(formatStr);
    }
}

打印结果如下:

{
	"房产":[
		{
			"area":"220平米",
			"address":"西虹市朱雀路888弄",
			"price":"20000000元"
		},
		{
			"area":"356平米",
			"address":"西虹市龙门路666弄",
			"price":"40000000元"
		}
	],
	"基本信息":{
		"weight":"150斤",
		"age":"36",
		"username":"王多鱼",
		"height":"175cm",
		"hobby":"花钱"
	},
	"女朋友":[
		{
			"skill":"钢琴,舞蹈",
			"name":"爱丽丝",
			"weight":"95斤",
			"age":"18",
			"height":"165cm"
		},
		{
			"skill":"小提琴,唱歌,舞蹈",
			"name":"安妮",
			"weight":"100斤",
			"age":"20",
			"height":"170cm"
		}
	]
}

4、格式化方式说明

fastjson是怎么格式化字符串的呢?我们可以debug跟踪一下代码。如下图所示,可以看到,fastjson往原始的字符串里面添加了很多的\n和\t格式字符,这样打印的时候,就会按照json格式打印出来。

json 格式化 java代码 java格式化json输出_json

方式二、使用Gson

1、项目的pom.xml依赖

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.2.4</version>
</dependency>

2、示例json字符串:

{"房产":[{"area":"220平米","address":"西虹市朱雀路888弄","price":"20000000元"},{"area":"356平米","address":"西虹市龙门路666弄","price":"40000000元"}],"基本信息":{"weight":"150斤","age":"36","username":"王多鱼","height":"175cm","hobby":"花钱"},"女朋友":[{"skill":"钢琴,舞蹈","name":"爱丽丝","weight":"95斤","age":"18","height":"165cm"},{"skill":"小提琴,唱歌,舞蹈","name":"安妮","weight":"100斤","age":"20","height":"170cm"}]}

3、示例代码

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

/**
 * @Description: 格式化输出
 * @Auther: ztt
 * @Date: 2020/4/21 13:30
 */
public class Test2 {
    public static void main(String[] args) {
        String jsonStr = "{\"房产\":[{\"area\":\"220平米\",\"address\":\"西虹市朱雀路888弄\",\"price\":\"20000000元\"},{\"area\":\"356平米\",\"address\":\"西虹市龙门路666弄\",\"price\":\"40000000元\"}],\"基本信息\":{\"weight\":\"150斤\",\"age\":\"36\",\"username\":\"王多鱼\",\"height\":\"175cm\",\"hobby\":\"花钱\"},\"女朋友\":[{\"skill\":\"钢琴,舞蹈\",\"name\":\"爱丽丝\",\"weight\":\"95斤\",\"age\":\"18\",\"height\":\"165cm\"},{\"skill\":\"小提琴,唱歌,舞蹈\",\"name\":\"安妮\",\"weight\":\"100斤\",\"age\":\"20\",\"height\":\"170cm\"}]}\n";
        JsonParser jsonParser = new JsonParser();
        JsonObject jsonObject = jsonParser.parse(jsonStr).getAsJsonObject();
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String formatStr = gson.toJson(jsonObject);

        System.out.println(formatStr);
    }
}

打印结果如下:

{
  "房产": [
    {
      "area": "220平米",
      "address": "西虹市朱雀路888弄",
      "price": "20000000元"
    },
    {
      "area": "356平米",
      "address": "西虹市龙门路666弄",
      "price": "40000000元"
    }
  ],
  "基本信息": {
    "weight": "150斤",
    "age": "36",
    "username": "王多鱼",
    "height": "175cm",
    "hobby": "花钱"
  },
  "女朋友": [
    {
      "skill": "钢琴,舞蹈",
      "name": "爱丽丝",
      "weight": "95斤",
      "age": "18",
      "height": "165cm"
    },
    {
      "skill": "小提琴,唱歌,舞蹈",
      "name": "安妮",
      "weight": "100斤",
      "age": "20",
      "height": "170cm"
    }
  ]
}

4、格式化方式说明

gson是怎么格式化字符串的呢?我们可以debug跟踪一下代码。如下图所示,可以看到,gson往原始的字符串里面添加了很多的\n和空格,也就是说换行用\n来操作,缩进用空格来搞,不同于fastson缩进用\t来搞。

json 格式化 java代码 java格式化json输出_字符串_02

       注意:

       以上测试,我们仅仅是在控制台里打印这些字符串,在实际的使用场景中,我们更多的是需要把格式化好的字符串写到文件或者生成各种文件。这个时候就要考虑一下字段忽略空格、缩进等问题。比方说生成pdf的ITEXT库,就会忽略掉\t,导致生成的pdf文件显示结果跟我们预想的不一样,如果出现这种问题,可以考虑用字符替换等方式解决。