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

Java 解析嵌套 JSON:快遞查詢數據結構映射實戰

     編輯:程式設計綜合問答

JSON 結構分析

{
  "id": "zhongtong",
  "name": "中通快遞",
  "order": "371466099000",
  "message": "",
  "errcode": "0000",
  "status": 4,
  "data": [
    { "time": "2015-11-23 16:57:06", "content": "南匯二部 的 三計項目 已收件" },
    { "time": "2015-11-23 19:33:57", "content": "快件離開 南匯二部 已發往 上海浦東中心" },
    { "time": "2015-11-23 23:01:46", "content": "快件已經到達 上海浦東中心 上一站是 南匯二部" },
    { "time": "2015-11-23 23:02:36", "content": "快件離開 上海浦東中心 已發往 南京中轉部" }
  ]
}

層級結構

  • **根對象**:`JSONObject`
  • **頂層字段**:`id`、`name`、`order`、`message`、`errcode` (String)、`status` (int)
  • **嵌套數組**:`data` → `JSONArray`,每個元素為 `JSONObject`(含 `time`、`content`)

實體類設計

public class ExpressResponse {
    private String id;
    private String name;
    private String order;
    private String message;
    private String errcode;
    private int status;
    private List data; // 嵌套列表
    
    // Getter/Setter 省略
    public static class Track {
        private String time;
        private String content;
        // Getter/Setter
    }
}

解析代碼

方案一:Gson(推薦,最簡潔)

// 依賴: implementation 'com.google.code.gson:gson:2.10.1'
Gson gson = new Gson();
ExpressResponse resp = gson.fromJson(jsonString, ExpressResponse.class);

if ("0000".equals(resp.getErrcode())) {
    for (ExpressResponse.Track track : resp.getData()) {
        System.out.println(track.getTime() + " - " + track.getContent());
    }
}

方案二:Jackson

// 依賴: implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
ObjectMapper mapper = new ObjectMapper();
ExpressResponse resp = mapper.readValue(jsonString, ExpressResponse.class);

方案三:原生 org.json(無第三方依賴)

try {
    JSONObject root = new JSONObject(jsonString);
    String errcode = root.getString("errcode");
    if ("0000".equals(errcode)) {
        JSONArray dataArray = root.getJSONArray("data");
        for (int i = 0; i < dataArray.length(); i++) {
            JSONObject item = dataArray.getJSONObject(i);
            String time = item.getString("time");
            String content = item.getString("content");
            System.out.println(time + " - " + content);
        }
    }
} catch (JSONException e) {
    e.printStackTrace();
}

Android 實戰提示

  • 網絡請求放子線程(`OkHttp` + `Gson` / `Retrofit` + `GsonConverterFactory`)。
  • 解析後在主線程更新 `RecyclerView` 顯示軌跡列表。
  • 實體類加 `@SerializedName("errcode")` 映射字段名不一致情況。

原回答補充

原最佳回答「整體是一個 jsonObject, data 是一個 jsonArray」正確但過於簡略。上文提供完整實體類、三種主流解析庫用法及 Android 落地建議。

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