Android Studio Java中如何仅获取JSON对象1的a、b值
正确解析JSON获取键“1”中a和b的值的方案
你的核心错误是把键“1”对应的**JSON对象(JSONObject)误当作JSON数组(JSONArray)**处理了——从目标JSON结构能看到,键“1”的值是一个包含a、b等键的对象,而非数组,所以不能用getJSONArray()方法。
以下是修正后的完整解析代码:
try { URL url = new URL("https://api.npoint.io/ba77aacc0972af3c686a"); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); InputStream inputStream = httpURLConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String line; String data = ""; // 初始化data,避免空指针异常 while ((line = bufferedReader.readLine()) != null){ data = data + line; } if (!data.isEmpty()){ JSONObject rootObject = new JSONObject(data); // 关键修正:获取键"1"对应的JSONObject,而非JSONArray JSONObject targetObject = rootObject.getJSONObject("1"); userList.clear(); // 直接提取目标对象中的a和b值 String aValue = targetObject.getString("a"); String bValue = targetObject.getString("b"); userList.add(aValue); userList.add(bValue); // 必须在主线程更新UI runOnUiThread(() -> { // 示例:通知列表适配器更新数据 // yourAdapter.notifyDataSetChanged(); }); } // 关闭资源,避免内存泄漏 bufferedReader.close(); inputStream.close(); httpURLConnection.disconnect(); } catch (Exception e) { e.printStackTrace(); }
额外注意事项
- 网络请求必须放在子线程执行(Android 3.0+强制要求),如果直接在按钮点击的主线程中运行,会抛出
NetworkOnMainThreadException,建议用Coroutine、AsyncTask或OkHttp等库简化网络操作。 - 若要避免键不存在导致的崩溃,可以用
optString()替代getString(),它会在键不存在时返回空字符串而非抛出异常。
内容的提问来源于stack exchange,提问作者potatolol
相关产品推荐
相关产品推荐

