前言
解决端上变量类型特殊需求
为了防止出现这种变态需求,明明是json对象,却用字符串接收的情况,以此作为记录
错误示例
1、直接调用原生的toString()方法
说明:这是java形式的json字符串,无论是net的toString()还是ali的toString()、toJSONString()方法,里面存的还是对象,并不是我们想要的结果
2、使用FackJson
说明:生成的是JavaScript的json字符串
解决方案
通过谷歌的Gson来实现
所需要的jar包
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
实现
/*
* json对象转格式化后的json字符串
* @attention: 入参格式不同,返回结果不同
* @param: json
* 如果参数是json对象,返回的将是:格式化后的json字符串(小于号>会被转码成\u003c,大于号>会被转码成\u003e,且替换无效);
* 如果参数是json字符串,返回的将是:带转义符\且两边带双引号的json字符串;
* 当参数是json字符串时,实现的效果与toJsonString()方法一样
* @return: java.lang.String
*/
public static String formatJson(Object json) {
// 非空校验
if (null == json) return "";
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
Gson gson = gsonBuilder.create();
String jsonStr = gson.toJson(json);
// 替换无效
// jsonStr = jsonStr.replaceAll("\\u003c","<").replaceAll("\\u003e", ">");
log.debug("json字符串格式化前:\n" + json.toString());
log.debug("json字符串格式化后:\n" + jsonStr);
return jsonStr;
}