Java 通过多种方式格式化 JSON 字符串

通过以下方式格式化 JSON 字符串。

  • Google Gson
  • Alibaba fastjson
  • Jackson

Google Gson

说明:Gson 使用 2 个空格作为换行后的格式转换。

引入依赖

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

JSON 格式化

public static String jsonFormat(String jsonString){
       if (StringUtils.isBlank(jsonString)) {
           return jsonString;
       }
       try {
           return toPrettyFormat(jsonString);
       } catch (Exception e) {
           try {
               return toPrettyFormatArray(jsonString);
           } catch (Exception e1){
               return jsonString;
           }
       }
}

public static String toPrettyFormat(String json) {
	JsonParser jsonParser = new JsonParser();
	JsonObject jsonObject = jsonParser.parse(json).getAsJsonObject();
	Gson gson = new GsonBuilder().setPrettyPrinting().create();
	return gson.toJson(jsonObject);
}

public static String toPrettyFormatArray(String json) {
	JsonParser jsonParser = new JsonParser();
	JsonArray jsonArray = jsonParser.parse(json).getAsJsonArray();
	Gson gson = new GsonBuilder().setPrettyPrinting().create();
	return gson.toJson(jsonArray);
}

结果示例

JSON Object

>> {"name":"jue","age":30}
{
  "name": "jue",
  "age": 30
}

JSON Array

>> [{"name":"jue","age":30},{"name":"kai","age":12}]
[
  {
    "name": "jue",
    "age": 30
  },
  {
    "name": "kai",
    "age": 12
  }
]

Alibaba fastjson

说明:FastJson 通过 Tab 键 进行换行后的格式化。

引入依赖

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

JSON 格式化

public static String jsonFormat(String jsonString) {
    try {
        return toPrettyFormat(jsonString);
    } catch (Exception e) {
        return jsonString;
    }
}

public static String toPrettyFormat(String jsonString) {
    try {
        JSONObject jsonObject = JSONObject.parseObject(jsonString);
        return JSONObject.toJSONString(jsonObject, true);
    } catch (JSONException e) {
        return toPrettyFormatArray(jsonString);
    }
}

public static String toPrettyFormatArray(String json) {
    JSONArray jsonArray = JSONArray.parseArray(json);
    return JSONArray.toJSONString(jsonArray, true);
}

结果示例

JSON Object

>> {"name":"jue","age":30}
{
	"name":"jue",
	"age":30
}

JSON Array

>> [{"name":"jue","age":30},{"name":"kai","age":12}]
[
	{
		"name":"jue",
		"age":30
	},
	{
		"name":"kai",
		"age":12
	}
]

Jackson

说明:Jackson 使用 2 个空格作为换行后的格式转换。

引入依赖

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

JSON 格式化

public static String jsonFormat(String jsonString) {
    try {
        ObjectMapper mapper = new ObjectMapper();
        Object obj = mapper.readValue(jsonString, Object.class);
        return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
    } catch (Exception e) {
        return jsonString;
    }
}

普通输出:

mapper.writeValueAsString(obj);

格式化 / 美化 / 优雅的输出:

mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);

结果示例

JSON Object

>> {"name":"jue","age":30}
{
  "name" : "jue",
  "age" : 30
}

JSON Array

>> [{"name":"jue","age":30},{"name":"kai","age":12}]
[ {
  "name" : "jue",
  "age" : 30
}, {
  "name" : "kai",
  "age" : 12
} ]