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

Java 從 JSONObject 提取鍵值對到兩個 ArrayList:使用 Iterator 遍歷

     編輯:程式設計綜合問答

問題現象

JSONObject 內部為 HashMap 結構,需將所有鍵值對分別存入 keys 與 values 兩個 ArrayList。

標準解法:Iterator 遍歷


String jsonString = writer.toString();
JSONObject jsonObj = new JSONObject(jsonString);
JSONObject currencies = jsonObj.getJSONObject("currencies");  // 假設鍵為 "currencies"

ArrayList keys = new ArrayList<>();
ArrayList values = new ArrayList<>();

Iterator iterator = currencies.keys();
while (iterator.hasNext()) {
    String key = iterator.next();
    keys.add(key);
    values.add(currencies.getString(key));  // 或 get(key) 轉字串
}

// 現在 keys = ["PKR", "EUR", ...], values = ["Rs", "€", ...]

關鍵 API

  • jsonObject.keys():回傳 Iterator,遍歷所有鍵。
  • jsonObject.getString(key):直接取得字串值,若值非字串拋出異常。
  • jsonObject.get(key):取得 Object,需自行轉型/轉字串。

完整範例(含錯誤處理)


public static void extractKeyValuePairs(JSONObject source, String targetKey, 
                                        List outKeys, List outValues) throws JSONException {
    JSONObject target = source.getJSONObject(targetKey);
    Iterator it = target.keys();
    while (it.hasNext()) {
        String key = it.next();
        outKeys.add(key);
        // 安全取值:支援字串、數字、布林,其他轉字串
        Object value = target.get(key);
        outValues.add(value == null ? "null" : value.toString());
    }
}

現代替代:Gson/Moshi 直接映射到 Map


// Gson
Map map = new Gson().fromJson(jsonString, new TypeToken>(){}.getType());
List keys = new ArrayList<>(map.keySet());
List values = new ArrayList<>(map.values());

優勢:型別安全、自動處理巢狀結構、程式碼極簡。

注意事項

  • JSONObject 無序:鍵的迭代順序不固定,若需保序請用 LinkedHashMap 或 Gson JsonObject (維護插入順序)。
  • 值型別多樣:JSON 值可能為字串、數字、布林、陣列、物件、null,getString() 僅適用字串值。
  • 大量資料:Iterator 逐個處理記憶體效率佳,避免一次性複製。

掌握 JSONObject.keys() + Iterator 遍歷模式,是 Java 原生 JSON 處理的基本功;生產環境建議直接用 Gson/Moshi 映射資料類別。

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