隨著移動設備普及,基於 J2ME 的客戶端與 J2EE 服務端的數據交互需求日益增長。在資源受限的移動環境中,選擇高效的數據交換格式至關重要。XML 雖然健壯但過於冗長,自定義格式又缺乏標準化。JSON 作為輕量級、易解析的文本格式,成為理想選擇。
面向資源受限設備(手機、PDA),提供 MIDP 配置文件,支援網絡應用開發,具備良好跨平台性。
企業級開發平台,採用多層分佈式架構:客戶層、Web 層、業務邏輯層、企業信息系統層。
輕量級數據交換格式,語法簡潔,支援對象與數組兩種結構,易於人閱讀、機器解析,完全獨立於語言。
| 格式 | 優點 | 缺點 |
|---|---|---|
| XML | 標準化、描述性強、工具成熟、適合 Web Services | 冗長、解析消耗資源大、不適合移動端 |
| 自定義格式 | 針對性優化、體積小 | 非標準、互操作性差、維護成本高 |
| JSON | 輕量、可讀性強、解析快、原生支援基本類型、節省頻寬與算力 | 無模式驗證、二進制數據處理需編碼 |
結論:在移動/嵌入式場景下,JSON 在性能與開發效率上均優於 XML 與自定義格式。
雙端架構:
流程:客戶端序列化 JSON → HTTP POST → 服務端反序列化 → 業務處理 → 序列化結果 → HTTP Response → 客戶端反序列化使用。
使用 org.json 庫處理三種 JSON 結構:
new JSONObject(msg).getString("key")jsonObj.getJSONObject("child")jsonObj.getJSONArray("list") 獲取 JSONArray 後迭代業務處理完畢後,構建 JSONObject 返回。
同樣使用 org.json.me API:
put() 方法添加鍵值對,支援簡單值、JSONObject、JSONArray。getString()、getInt()、getJSONObject()、getJSONArray() 提取數據。採用 HTTP 協議,所有 MIDP 設備均支援。考慮到 GET 請求 URL 長度限制及安全性,機密或大數據請求強制使用 POST 方式。
JSONObject request = new JSONObject();
request.put("action", "queryNews");
request.put("category", "sports");
JSONArray params = new JSONArray();
params.put("page=1");
params.put("size=10");
request.put("params", params);
String jsonStr = request.toString();
// 發送 HTTP POST 請求...
// Servlet 中
String jsonInput = IOUtils.toString(request.getInputStream(), "UTF-8");
JSONObject jsonReq = new JSONObject(jsonInput);
String action = jsonReq.getString("action");
JSONArray params = jsonReq.getJSONArray("params");
// 業務邏輯處理...
List newsList = newsService.query(params);
JSONObject response = new JSONObject();
response.put("status", "success");
JSONArray dataArray = new JSONArray();
for (News n : newsList) {
JSONObject item = new JSONObject();
item.put("title", n.getTitle());
item.put("url", n.getUrl());
dataArray.put(item);
}
response.put("data", dataArray);
response.getWriter().write(response.toString());
在 J2ME/J2EE 異構環境中採用 JSON 進行數據交換,有效解決了 XML 過於沉重、自定義格式難以維護的問題。通過標準化的 HTTP+JSON 框架,實現了客戶端與服務端的高效、低耦合通信,顯著降低了移動端資源消耗與網絡延遲。