回應內容為單一 JSON 物件 {"id":"602414132",...},程式碼嘗試 new JSONArray(response) 拋出 JSONException: Value ... of type JSONObject cannot be converted to JSONArray。
JSON 結構不匹配:伺服器回傳單一物件 {...},而非陣列 [{...}]。JSONArray 建構子只接受以 [ 開頭的字串。
// 直接建立 JSONObject
JSONObject json = new JSONObject(responseString);
String id = json.getString("id");
String name = json.getString("name");
// ... 直接取值,無需迴圈
// {"users": [{...}, {...}]}
JSONObject json = new JSONObject(responseString);
JSONArray array = json.getJSONArray("users"); // 取得陣列
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
// 處理每個物件
}
Object parsed = new JSONTokener(responseString).nextValue();
if (parsed instanceof JSONObject) {
JSONObject obj = (JSONObject) parsed;
// 單一物件處理
} else if (parsed instanceof JSONArray) {
JSONArray array = (JSONArray) parsed;
// 陣列處理
}
// 原錯誤
// JSONArray json = new JSONArray(DownloadText(url)); // 崩潰
// 修正
JSONObject json = new JSONObject(DownloadText(url));
// 如果確定有陣列欄位
// JSONArray array = json.getJSONArray("your_array_key");
FBUser user = new FBUser();
user.id = json.getString("id");
user.name = json.getString("name");
// ... 其他欄位
// Gson
FBUser user = new Gson().fromJson(responseString, FBUser.class);
// 自動處理巢狀、型別轉換、null 安全
優勢:零樣板碼、編譯期型別檢查、重構安全、效能優於手寫解析。
{} = JSONObject,[] = JSONArray,首字元決定結構。JSON 解析的鐵律:先看結構,再選工具,拒絕盲目試錯。