You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何从JSON响应指定位置获取目标值?

解决JSON层级定位问题

首先明确你的JSON结构层级,目标字段的路径如下:

  • F0092_AN8:ServiceRequest1 → fs_DATABROWSE_F0092 → data → gridData → rowset(数组,取第0个元素) → F0092_AN8
  • records: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 19:52:45