gson 生成的json字符串帶\u003c,\u003d,\u003e的解決方案(gson將實體類轉json)


1.情景展示

  如上圖所示,使用谷歌的Gson將實體類轉json字符串,如果實體類的屬性值,出現大於號、小於號、等號等符號時,調用GsonBuilder進行轉換時,這些符號會被強制轉換成unicode編碼。

  如何解決這個問題? 

2.原因分析

  錯誤方式一:使用replaceAll()

  錯誤方式二:使用iso-8859-1解碼

3.解決方案

  方式一:使用js解碼

// 實例化對象並賦值
Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
// 實體類轉json字符串
String gsonStr = new GsonBuilder().create().toJson(result);
ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
String unUrl = "";
try {
    unUrl = (String)engine.eval("unescape('"+gsonStr+"')");
    System.out.println(unUrl);
} catch (ScriptException e) {
    e.printStackTrace();
}

  雖然這種方式可以實現解碼,但不推薦使用。 

  方式二:禁用html編碼(推薦使用)

// 實例化對象並賦值
Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
// 實體類轉json字符串(禁止編碼)
String gsonStr = new GsonBuilder().disableHtmlEscaping().create().toJson(result);
System.out.println(gsonStr);

  方式三:轉json對象

// 實例化對象並賦值
Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
// 實體類轉json字符串
String gsonStr = new GsonBuilder().create().toJson(result);
com.alibaba.fastjson.JSONObject aliJSON = JSONObject.parseObject(gsonStr);
System.out.println(aliJSON);

  注意:必須使用阿里的json,不能使用net的json。

  netJson執行結果如下: 

4.拓展

  使用Gson將實體類轉json字符串,其實有兩種方式。

  除了使用GsonBuilder外,還可以使用Gson實現

  使用這種方式,也同樣存在着被亂編碼的情況。

  使用GsonBuilder轉json,還有一個功能就是:可以格式化json字符串。

  我們知道,在Java中,不管是json對象還是字符串,打印到控制台上的數據,始終只顯示在一行上,無法進行格式化。

// 實例化對象並賦值
Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
GsonBuilder gsonBuilder = new GsonBuilder();
// 美化輸出(這里是格式化的關鍵)
gsonBuilder.setPrettyPrinting();
// 實體類轉json字符串(禁止編碼)
String gsonStr = gsonBuilder.disableHtmlEscaping().create().toJson(result);
System.out.println(gsonStr);

 

  這樣,在實際開發調試過程中,當控制台出現一大坨json字符串時,我們再也不用將其單獨復制出來,再格式化進行查看啦。 

  綜上所述,使用GsonBuilder比Gson功能更加強大。

  另外,使用谷歌的Gson轉json字符串還有一個好處就是:不用擔心當屬性名稱不是標准的駝峰命名法(比如上面:首字母是大寫)時,轉換出來的key名稱和屬性名稱不完全一致的問題。

  2020-12-23

  當想對json字符串進行格式化時,需要先將json字符串轉json對象,再用GsonBuilder進行格式化。

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM