Android Studio中如何从JSON响应指定位置获取目标值?
解决JSON层级定位问题
首先明确你的JSON结构层级,目标字段的路径如下:
F0092_AN8:ServiceRequest1→fs_DATABROWSE_F0092→data→gridData→rowset(数组,取第0个元素) →F0092_AN8records:ServiceRequest1→fs_DATABROWSE_F0092→data→gridData→summary→records
你的代码错误在于直接从fs_DATABROWSE_F0092对象里找F0092_AN8,但这个字段并不在这一层,需要逐层深入。以下是修正后的代码:
JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.POST, Url.ROOT_URL, obj, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { progressDialog.dismiss(); Log.d("JSON response -->", response.toString()); try { // 逐层获取嵌套对象 JSONObject serviceRequest = response.getJSONObject("ServiceRequest1"); JSONObject fsDatabrowse = serviceRequest.getJSONObject("fs_DATABROWSE_F0092"); JSONObject data = fsDatabrowse.getJSONObject("data"); JSONObject gridData = data.getJSONObject("gridData"); // 获取F0092_AN8的值 JSONArray rowset = gridData.getJSONArray("rowset"); if (rowset.length() > 0) { JSONObject firstRow = rowset.getJSONObject(0); int an8Value = firstRow.getInt("F0092_AN8"); Log.d("F0092_AN8", String.valueOf(an8Value)); } // 获取records的值 JSONObject summary = gridData.getJSONObject("summary"); int recordsCount = summary.getInt("records"); Log.d("records", String.valueOf(recordsCount)); } catch (JSONException e) { e.printStackTrace(); Log.e("JSON Error", "解析失败: " + e.getMessage()); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { progressDialog.dismiss(); Log.e("Request Error", error.getMessage()); } });
关键说明
- 必须按照JSON的嵌套层级逐层获取对象,不能跨层直接访问子字段
rowset是JSON数组,需要先判断数组长度,再取第一个元素(因为你的数据里只有一条记录)- 记得捕获
JSONException,避免因字段缺失或类型不匹配导致崩溃
内容的提问来源于stack exchange,提问作者Kevin Mendoza
相关产品推荐
相关产品推荐

