大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java轉義json字符串

Java轉義json字符串

更新時間:2022-10-18 10:58:35 來源:動力節點 瀏覽3979次

1.概述

在這個簡短的教程中,我們將展示一些在 Java 中轉義 JSON 字符串的方法。

我們將快速瀏覽最流行的 JSON 處理庫以及它們如何使轉義成為一項簡單的任務。

2.會出什么問題?

讓我們考慮一個簡單但常見的用例,將用戶指定的消息發送到 Web 服務。天真地,我們可以嘗試:

String payload = "{\"message\":\"" + message + "\"}";
sendMessage(payload);

但是,實際上,這會帶來很多問題。

最簡單的是如果消息包含引號:

{ "message" : "My "message" breaks json" }

更糟糕的是用戶可以故意破壞請求的語義。如果他發送:

Hello", "role" : "admin

 然后消息變為:

{ "message" : "Hello", "role" : "admin" }

最簡單的方法是用適當的轉義序列替換引號:

String payload = "{\"message\":\"" + message.replace("\"", "\\\"") + "\"}";

但是,這種方法非常脆弱:

需要對每個連接的值執行此操作,并且我們需要始終牢記我們已經轉義了哪些字符串

此外,隨著消息結構隨時間變化,這可能會成為維護難題

而且很難閱讀,更容易出錯

簡而言之,我們需要采用更通用的方法。不幸的是,原生 JSON 處理功能仍處于JEP 階段,因此我們不得不將目光轉向各種開源 JSON 庫。

3. JSON-java 庫

我們評論中最簡單和最小的庫是JSON-java,也稱為org.json。

要構造一個 JSON 對象,我們只需創建一個JSONObject 的實例,并且基本上將它視為一個Map:

JSONObject jsonObject = new JSONObject();
jsonObject.put("message", "Hello \"World\"");
String payload = jsonObject.toString();

這將采用“世界”周圍的引號并轉義它們:

{
   "message" : "Hello \"World\""
}

4.Jackson

用于 JSON 處理的最流行和通用的 Java 庫之一是Jackson。

乍一看,Jackson 的行為與 org.json類似:

Map<String, Object> params = new HashMap<>();
params.put("message", "Hello \"World\"");
String payload = new ObjectMapper().writeValueAsString(params);

但是,Jackson 也可以支持序列化 Java 對象。

因此,讓我們通過將消息包裝在自定義類中來稍微增強我們的示例:

class Payload {
    Payload(String message) {
        this.message = message;
    }
    String message;    
    // getters and setters
}

然后,我們需要一個 ObjectMapper的實例,我們可以將對象的實例傳遞給它:

String payload = new ObjectMapper().writeValueAsString(new Payload("Hello \"World\""));

在這兩種情況下,我們都會得到與之前相同的結果:

{
   "message" : "Hello \"World\""
}

如果我們有一個已經轉義的屬性并且需要在不進一步轉義的情況下對其進行序列化,我們可能希望在該字段上使用 Jackson 的@JsonRawValue注釋。

5.Gson

Gson 是 Google 的一個庫,經常與 Jackson 正面交鋒。

當然,我們可以再次像使用org.json 那樣做:

JsonObject json = new JsonObject();
json.addProperty("message", "Hello \"World\"");
String payload = new Gson().toJson(gsonObject);

或者我們可以使用自定義對象,例如 Jackson:

String payload = new Gson().toJson(new Payload("Hello \"World\""));

我們將再次得到相同的結果。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 在线99视频 | 日本 毛片基地-亚洲 | 久热这里只精品热在线观看 | 亚洲精品欧洲久久婷婷99 | 九九亚洲 | 在线视频久久 | 中文字幕亚洲精品久久 | 精品一区二区三区免费毛片爱 | 久色视频在线观看 | 欧美精彩狠狠色丁香婷婷 | 97干色| 欧美日韩免费播放一区二区 | 淫视频在线观看 | 九天玄帝诀高清300集免费观看 | 国产精品模特hd在线 | 色综合成人 | 欧美不卡一区 | 国产精品成人免费视频99 | 久久精品国产99久久香蕉 | 久久精品人人做人人爱爱 | 国产精品福利视频主播真会玩 | 精品国产日韩久久亚洲 | 欧美成人极品怡红院tv | 欧美午夜视频一区二区三区 | 五月婷婷中文 | 精品中文字幕一区二区三区四区 | 午夜伦y4480影院中文字幕 | 久久久国产视频 | 日本黄大片影院一区二区 | 久久97久久97精品免视看 | 秋霞在线观看成人高清视频51 | 日本又黄又爽又色的免费视频 | 九色福利视频 | 四虎影院永久免费观看 | 日韩欧美中文字幕在线视频 | 日韩性生活视频 | 在线观看精品国内福利视频 | 午夜成人在线视频 | 久久福利资源站免费观看i 久久高清 | 免费高清在线影片一区 | 成人a免费α片在线视频网站 |