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

Android 解析 JSONObject 將鍵值對提取到 ArrayList 的標準做法

     編輯:程式設計綜合問答

場景與數據結構

JSON 字串包含一個對象,其 CurrenciesKey 對應一個映射(如 {"PKR":"Rs", "EUR":"€", ...})。需將所有鍵與值分別存入 ArrayList<String>。

標準解析代碼

String jsonString = writer.toString();
JSONObject jsonObj = new JSONObject(jsonString);
JSONObject currenciesObj = jsonObj.getJSONObject("CurrenciesKey"); // 確認是 JSONObject

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

Iterator<String> iterator = currenciesObj.keys();
while (iterator.hasNext()) {
    String key = iterator.next();
    keys.add(key);
    values.add(currenciesObj.getString(key)); // 或 get(key) 後 toString()
}

// 驗證
for (int i = 0; i < keys.size(); i++) {
    Log.d("CURRENCY", keys.get(i) + " -> " + values.get(i));
}

關鍵點說明

  1. 使用 keys() 迭代器:JSONObject 內部以 HashMap 存儲,keys() 返回所有鍵的迭代器,順序不保證。
  2. 類型安全獲取值:若值均為字串,用 getString(key) 直接拋異常提示類型不匹配;若類型混雜,用 get(key) 後自行處理。
  3. 異常處理:解析過程需包裹 try-catch (JSONException e)。

進階:保持插入順序(API 19+)

若需保留 JSON 原始順序,可改用 JSONTokener 配合自定義解析,或使用 Gson/Moshi 映射為 LinkedHashMap:

// Gson 示例
Type type = new TypeToken<LinkedHashMap<String, String>>(){}.getType();
LinkedHashMap<String, String> map = new Gson().fromJson(currenciesObj.toString(), type);
ArrayList<String> keys = new ArrayList<>(map.keySet());
ArrayList<String> values = new ArrayList<>(map.values());

總結

核心模式:JSONObject.keys() 遍歷鍵 → getString(key) 取值 → 分別加入兩個 ArrayList。若順序敏感,引入 Gson 映射 LinkedHashMap 即可。

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