使用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
相关产品推荐
相关产品推荐

