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