JSONObject 內部為 HashMap 結構,需將所有鍵值對分別存入 keys 與 values 兩個 ArrayList。
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", "€", ...]
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
Map map = new Gson().fromJson(jsonString, new TypeToken
優勢:型別安全、自動處理巢狀結構、程式碼極簡。
LinkedHashMap 或 Gson JsonObject (維護插入順序)。getString() 僅適用字串值。Iterator 逐個處理記憶體效率佳,避免一次性複製。掌握 JSONObject.keys() + Iterator 遍歷模式,是 Java 原生 JSON 處理的基本功;生產環境建議直接用 Gson/Moshi 映射資料類別。