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

如何用Volley库在JsonArray中存入多个JsonObject及服务端ArrayList转JsonArray

关于Volley客户端与服务端JSON数组处理的解决方案

刚好之前做过类似的需求,我来给你详细解答这两个问题:


问题1:如何使用Volley库将多个JsonObject放入JsonArray中?

其实步骤很清晰,先逐个构建JsonObject,再把它们添加到JsonArray里,最后通过Volley发送请求就行。这里给你完整的代码示例,完全贴合你给出的参数格式:

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.util.Log;

// 在你的Activity或Fragment中调用
public void sendMultiJsonObjectRequest(Context context) {
    // 1. 初始化空的JsonArray
    JSONArray jsonArray = new JSONArray();

    try {
        // 2. 创建第一个数据对象并加入数组
        JSONObject item1 = new JSONObject();
        item1.put("year", "2019");
        item1.put("amt", 6222);
        jsonArray.put(item1);

        // 3. 创建第二个数据对象并加入数组
        JSONObject item2 = new JSONObject();
        item2.put("year", "2016");
        item2.put("amt", 5555);
        jsonArray.put(item2);

        // 4. 把JsonArray包装成服务端需要的请求体(带"list"字段)
        JSONObject requestBody = new JSONObject();
        requestBody.put("list", jsonArray);

        // 5. 构建Volley请求
        JsonObjectRequest request = new JsonObjectRequest(
                Request.Method.POST,
                "你的服务端接口地址",
                requestBody,
                response -> {
                    // 请求成功后的处理逻辑
                    Log.d("VolleySuccess", "响应数据:" + response.toString());
                },
                error -> {
                    // 请求失败后的处理逻辑
                    Log.e("VolleyError", "请求出错:" + error.getMessage());
                }
        );

        // 6. 将请求加入Volley队列
        RequestQueue queue = Volley.newRequestQueue(context);
        queue.add(request);

    } catch (JSONException e) {
        // 捕获JSON构造时的异常
        e.printStackTrace();
    }
}

注意事项:

  • 一定要捕获JSONException,因为JSONObject.put()方法可能会抛出异常
  • 如果服务端直接接收纯JsonArray,你也可以用StringRequest发送jsonArray.toString()作为请求体,不过大多数场景下都会像示例这样包装在一个父JsonObject里

问题2:服务端如何将ArrayList放入JsonArray?

我以Java技术栈(比如Spring Boot)为例,给你两种实现方式——手动构造和框架自动序列化:

方式1:手动构造JsonArray(适合非框架场景)

import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;

public class ServerJsonHandler {
    public static void main(String[] args) {
        // 1. 准备ArrayList数据
        List<YearAmt> dataList = new ArrayList<>();
        dataList.add(new YearAmt("2019", 6222));
        dataList.add(new YearAmt("2016", 5555));

        // 2. 初始化JsonArray并逐个添加JsonObject
        JSONArray jsonArray = new JSONArray();
        for (YearAmt item : dataList) {
            JSONObject jsonObj = new JSONObject();
            try {
                jsonObj.put("year", item.getYear());
                jsonObj.put("amt", item.getAmt());
                jsonArray.put(jsonObj);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        // 3. 包装成带"list"字段的响应对象(可选,根据服务端接口要求)
        JSONObject response = new JSONObject();
        try {
            response.put("list", jsonArray);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 输出结果就是你需要的格式:{"list":[{"year":"2019","amt":6222},{"year":"2016","amt":5555}]}
        System.out.println(response.toString());
    }

    // 定义数据实体类
    static class YearAmt {
        private String year;
        private int amt;

        public YearAmt(String year, int amt) {
            this.year = year;
            this.amt = amt;
        }

        // Getter方法
        public String getYear() { return year; }
        public int getAmt() { return amt; }
    }
}

方式2:Spring Boot框架自动序列化(推荐)

如果用Spring Boot开发服务端,根本不用手动构造Json,框架会帮你自动完成序列化:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api")
public class DataController {

    @GetMapping("/getList")
    public Map<String, List<YearAmt>> getListData() {
        // 准备ArrayList数据
        List<YearAmt> dataList = new ArrayList<>();
        dataList.add(new YearAmt("2019", 6222));
        dataList.add(new YearAmt("2016", 5555));

        // 包装成带"list"字段的响应
        Map<String, List<YearAmt>> response = new HashMap<>();
        response.put("list", dataList);

        return response;
        // 框架会自动序列化为你需要的JSON格式
    }

    // 数据实体类
    static class YearAmt {
        private String year;
        private int amt;

        // 构造方法、Getter和Setter(IDE可自动生成)
        public YearAmt(String year, int amt) {
            this.year = year;
            this.amt = amt;
        }

        public String getYear() { return year; }
        public void setYear(String year) { this.year = year; }
        public int getAmt() { return amt; }
        public void setAmt(int amt) { this.amt = amt; }
    }
}

这种方式更简洁,避免了手动处理JSON的异常,而且维护起来更方便。


内容的提问来源于stack exchange,提问作者Devanand Adabaile

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:51:34