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

使用Gson的JsonObject添加自定义对象与Set类型参数的实现问题

实现方案

你需要的最终请求体中parameters是JSON字符串类型,因此需要先构造parameters对应的JSON结构,再将其序列化为字符串后赋值给外层对象的parameters字段,具体实现如下:

方案1:配合自定义对象序列化(推荐)

如果你的Customer、Address是已经定义好的Java类,属性和目标JSON字段完全匹配,直接用Gson自动序列化即可:

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import java.util.Set;
import java.util.HashSet;

public class JsonBuildDemo {
    public static void main(String[] args) {
        // 初始化Gson实例
        Gson gson = new Gson();

        // 1. 构造parameters对应的内层JSON对象
        JsonObject innerParamObj = new JsonObject();

        // 2. 赋值customer自定义对象
        Customer customer = new Customer();
        // 这里自行补全customer的属性赋值:firstName、lastName、emailAddresses、address等
        innerParamObj.add("customer", gson.toJsonTree(customer));

        // 3. 赋值Set类型的options
        Set<String> options = new HashSet<>();
        options.add("tv");
        // 按需添加其他选项
        innerParamObj.add("options", gson.toJsonTree(options));

        // 4. 将内层对象序列化为JSON字符串
        String paramJsonStr = gson.toJson(innerParamObj);

        // 5. 构造最终的外层请求体
        JsonObject outerReqBody = new JsonObject();
        outerReqBody.addProperty("parameters", paramJsonStr);

        // 测试输出,验证结构是否符合要求
        System.out.println(gson.toJson(outerReqBody));
    }
}

方案2:全手动构造JsonObject

如果没有定义对应的Java类,可以手动拼接所有字段:

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonArray;

public class ManualJsonBuildDemo {
    public static void main(String[] args) {
        Gson gson = new Gson();
        JsonObject innerParamObj = new JsonObject();

        // 手动构造customer对象
        JsonObject customer = new JsonObject();
        customer.addProperty("firstName", "Temp");
        customer.addProperty("lastName", "Temp");
        // 构造邮箱数组
        JsonArray emailArr = new JsonArray();
        emailArr.add("temp1@temp.com");
        customer.add("emailAddresses", emailArr);
        // 构造address对象
        JsonObject address = new JsonObject();
        address.addProperty("street1", "123 W Temp St");
        address.addProperty("city", "Temp");
        address.addProperty("state", "Illinois");
        address.addProperty("zipCode", "61122");
        customer.add("address", address);

        innerParamObj.add("customer", customer);

        // 构造options数组
        JsonArray optionsArr = new JsonArray();
        optionsArr.add("tv");
        innerParamObj.add("options", optionsArr);

        // 构造外层请求体
        JsonObject outerReqBody = new JsonObject();
        outerReqBody.addProperty("parameters", gson.toJson(innerParamObj));
    }
}

注意事项

  • 如果自定义类的属性名和目标JSON字段名不一致,可在类属性上添加@SerializedName("目标字段名")注解指定映射关系
  • Gson会自动递归序列化自定义类的嵌套属性(比如Customer里的Address属性),不需要额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:15:08