總結下最近的工作遇到的點:
入參復雜 JSON 層層嵌套,Java 怎么優雅的處理。
一、關于 JSON
JSON 是類似 XML 用于存儲和交互文本信息。但優于 XML ,其更小,更快,更易懂和解析。其是一個無序的”名稱/值”對的集合。由
{ 左括號
""名稱 String
:
值
} 右括號
組成。然后 名稱值對 以逗號分隔。
二、場景描述
是一個正則匹配替換的操作。一個很長很復雜的 JSON 入參,通過正則匹配其 content 對應的值中的圖片地址并替換。
三、思考
框架選型 – fastjson
(fastjson 是一個性能很好的 Java 語言實現的 JSON 解析器和生成器,來自阿里巴巴的工程師開發。)
a . 思路
Java 是面向對象的語言。我要利用 fastjson 把復雜的 JSON 寫出其對應的 BO 對象,然后正則替換 content 內容(即 operatorContent 方法),然后重新生成 JSON 響應。即下面代碼操作:
OperatorBO operatorBO = JSON.parseObject(jsonString, OperatorBO.class);
operatorBO.setContent(operatorContent(operatorBO.getContent()));
String newJsonString = JSON.toJSONString(operatorBO);
好處:代碼易讀,容易維護
壞處:BO 實在是太復雜,而且很多數組嵌數組。PHP -> Java 服務化過程中很多不可控,容易出 BUG。
涉及的API :
序列化對象到 JSON:
String jsonString = JSON.toJSONString(obj);
反序列化 JSON 到對象:
VO vo = JSON.parseObject("...", VO.class);
摘要: 原創出處:www.bysocket.com 泥瓦匠BYSocket 希望轉載,保留摘要,謝謝!
b . 思路
只是替換操作,所以不用太考慮代碼易讀性。直接利用 fastjson 直接轉出 JSONArray 對象,然后操作該對象即可。JSONArray 對象本質就是一個 List 如下代碼:
publicclassJSONArrayextendsJSON {
privatefinalList list;
protectedtransientObject relatedArray;
}
具體偽代碼如下:
String jsonString ="[{"+"\"content\":\"content value 1\""+"}]";
JSONArray itemDataJsonArr = JSON.parseArray(jsonString);
String content = itemDataJsonArr.getJSONObject(0).getString("content");
content = content +"23";
itemDataJsonArr.getJSONObject(0).put(CONTENT,content);
好處:不用關心其他復雜的鍵值對,目標只關注要替換的節點名稱。
壞處:代碼不易讀,相對也還容易維護。
涉及的API :
替換對應的節點名稱的值:
JSONObject.put("...",value);
反序列化 JSON 到 JSONArray 對象:
JSONArray jSONArray = JSON.parseObject("...");
思路 c d e …
四、小結
根據服務化場景,在不確定入參 JSON 的復雜度情況下,選擇了思路 b.這篇其實是工作上的小小結。任何技術,任何框架的 API 是否好用優雅,是具體場景決定的。
如以上文章或鏈接對你有幫助的話,別忘了在文章結尾處評論哈~ 你也可以點擊頁面右邊“分享”懸浮按鈕哦,讓更多的人閱讀這篇文章。