首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

Java ME 中使用 JSON 進行輕量級數據交換:完整解析與實戰代碼

     編輯:J2ME

移動應用數據交換格式選擇至關重要。XML 雖標準但冗長;自定義二進制雖高效但不可互操作。JSON (JavaScript Object Notation) 以極簡語法、原生支援基本類型、文本可讀性強,成為資源受限設備的理想選擇。本文介紹 JSON 語法、Java ME 專用 API(JSON ME),並提供完整序列化/反序列化實戰代碼。

為什麼選 JSON?

  • 輕量:語法極簡,傳輸體積小,解析快,省電
  • 文本可讀:易除錯、易追蹤
  • 跨語言:JavaScript 原生,Java、C#、Python 等均有成熟庫
  • 結構靈活:物件(名值對集合)+ 陣列(有序列表)即可表達任意結構

JSON 語法速查

類型起始/終止範例
Object{ }{"name":"Enrique", "age":30}
Array[ ]["mobile", "web", "apps"]
String" ""C. Enrique Ortiz"
Number—15569, 3.14, 1.2e3
Boolean—true, false
Null—null

轉義字符:\" \\ \/ \b \f \n \r \t \uXXXX

實戰範例:JSON-Time 服務

請求:https://json-time.appspot.com/time.json?tz=US/Central
響應:
{
  "tz": "US/Central",
  "hour": 15,
  "datetime": "Tue, 05 Aug 2008 15:02:27 -0500",
  "second": 27,
  "error": false,
  "minute": 2
}

JSON ME API 概覽

Sun 開源專案(Java.net),約 25 KB JAR,支援 CLDC 1.0/1.1 條件編譯。

套件核心類說明
org.json.meJSONObject名值對集合,核心操作類
JSONArray有序值序列
JSONException解析/操作異常
JSONString / JSONStringer / JSONWriter序列化輔助
JSONTokener解析器工具
org.json.me.utilXML / XMLTokenerXML→JSON 轉換

實戰:DataTypes 類完整序列化/反序列化

定義資料類別(CLDC 1.0 相容,無 double)


class DataTypes {
    public String aString;
    public String[] anArray;
    public int anInteger;
    public long aLong;
    public boolean aBoolean;

    public DataTypes(String aString, String[] anArray, int anInteger, long aLong, boolean aBoolean) {
        this.aString = aString;
        this.anArray = anArray;
        this.anInteger = anInteger;
        this.aLong = aLong;
        this.aBoolean = aBoolean;
    }

    // 序列化為 JSON 字串
    public String toJSON() {
        JSONObject outer = new JSONObject();
        JSONObject inner = new JSONObject();
        try {
            outer.put("datatypes", inner);
            inner.put("aString", aString);
            JSONArray ja = new JSONArray();
            for (int i = 0; i < anArray.length; i++) ja.put(anArray[i]);
            inner.put("anArray", ja);
            inner.put("anInteger", anInteger);
            inner.put("aLong", aLong);
            inner.put("aBoolean", aBoolean);
        } catch (JSONException ex) { /* handle */ }
        return outer.toString();
    }

    // 從 JSON 字串反序列化
    public void fromJSON(String ji) {
        aString = null; anArray = null; anInteger = 0; aLong = 0; aBoolean = false;
        try {
            JSONObject outer = new JSONObject(ji);
            JSONObject inner = outer.getJSONObject("datatypes");
            if (inner != null) {
                aString = inner.getString("aString");
                JSONArray ja = inner.getJSONArray("anArray");
                if (ja != null) {
                    anArray = new String[ja.length()];
                    for (int i = 0; i < ja.length(); i++) anArray[i] = ja.getString(i);
                }
                anInteger = inner.getInt("anInteger");
                aLong = inner.getLong("aLong");
                aBoolean = inner.getBoolean("aBoolean");
            }
        } catch (Exception e) { /* handle */ }
    }

    // 除錯輸出
    public void dump() {
        System.out.println("aString: " + aString);
        if (anArray != null) for (int i=0;i

使用範例


DataTypes dt = new DataTypes(
    "C. Enrique Ortiz",
    new String[]{"tech","mobile","web","apps"},
    15569, 1234567890L, true
);
String json = dt.toJSON();
System.out.println("JSON: " + json);
// {"datatypes":{"aString":"C. Enrique Ortiz","anArray":["tech","mobile","web","apps"],"anInteger":15569,"aLong":1234567890,"aBoolean":true}}

dt.fromJSON(json);
dt.dump(); // 驗證還原正確

最佳實踐提醒

  • 鍵名硬編碼易出錯,建議定義常量或用註解處理器生成。
  • 大量數據考慮流式解析(JSONTokener)避免一次載入全文。
  • CLDC 1.0 環境下 double 不支援,傳輸浮點數可乘 1000 傳 int/long,接收端再除。
  • 異常處理不可省略,網路數據不可信。

結語

JSON ME 提供完整、輕量的 JSON 支援,讓 Java ME 應用能以標準、高效、可除錯的格式與後端、Web 服務互操作。掌握 JSONObject/JSONArray 核心 API,即可輕鬆實現雙向序列化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved