【工做代碼】複雜 JSON 值替換處理

總結下最近的工做遇到的點:
入參複雜 JSON 層層嵌套,Java 怎麼優雅的處理。json

1、關於 JSON

JSON 是相似 XML 用於存儲和交互文本信息。但優於 XML ,其更小,更快,更易懂和解析。其是一個無序的」名稱/值」對的集合。由數組

1框架

2socket

3性能

4spa

5code

{ 左括號對象

"" 名稱 String圖片

ci

} 右括號

組成。而後 名稱值對 以逗號分隔。

2、場景描述

是一個正則匹配替換的操做。一個很長很複雜的 JSON 入參,經過正則匹配其 content 對應的值中的圖片地址並替換。

3、思考

框架選型 – fastjson
(fastjson 是一個性能很好的 Java 語言實現的 JSON 解析器和生成器,來自阿里巴巴的工程師開發。)

a . 思路
Java 是面向對象的語言。我要利用 fastjson 把複雜的 JSON 寫出其對應的 BO 對象,而後正則替換 content 內容(即 operatorContent 方法),而後從新生成 JSON 響應。即下面代碼操做:

1

2

3

OperatorBO operatorBO = JSON.parseObject(jsonString, OperatorBO.class);

operatorBO.setContent(operatorContent(operatorBO.getContent()));

String newJsonString = JSON.toJSONString(operatorBO);

 

好處:代碼易讀,容易維護
壞處:BO 實在是太複雜,並且不少數組嵌數組。PHP -> Java 服務化過程當中不少不可控,容易出 BUG。

涉及的API :
序列化對象到 JSON:

1

String jsonString = JSON.toJSONString(obj);

反序列化 JSON 到對象:

1

VO vo = JSON.parseObject("...", VO.class);

摘要: 原創出處:www.bysocket.com 泥瓦匠BYSocket 但願轉載,保留摘要,謝謝!

b . 思路
只是替換操做,因此不用太考慮代碼易讀性。直接利用 fastjson 直接轉出 JSONArray 對象,而後操做該對象便可。JSONArray 對象本質就是一個 List<Object> 以下代碼:

1

2

3

4

public class JSONArray extends JSON {

    private final List<Object> list;

    protected transient Object relatedArray;

}

具體僞代碼以下:

1

2

3

4

5

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 :
替換對應的節點名稱的值:

1

JSONObject.put("...",value);

反序列化 JSON 到 JSONArray 對象:

1

JSONArray jSONArray = JSON.parseObject("...");

思路 c d e …

 

4、小結

根據服務化場景,在不肯定入參 JSON 的複雜度狀況下,選擇了思路 b.這篇實際上是工做上的小小結。任何技術,任何框架的 API 是否好用優雅,是具體場景決定的。

如以上文章或連接對你有幫助的話,別忘了在文章結尾處評論哈~ 你也能夠點擊頁面右邊「分享」懸浮按鈕哦,讓更多的人閱讀這篇文章。

相關文章
相關標籤/搜索