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));
}
keys() 迭代器:JSONObject 內部以 HashMap 存儲,keys() 返回所有鍵的迭代器,順序不保證。getString(key) 直接拋異常提示類型不匹配;若類型混雜,用 get(key) 後自行處理。try-catch (JSONException e)。若需保留 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 即可。