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

如何将双引号包裹的数组字符串转为数组?Android JSON请求适配

解决Android中Gson序列化数组变成字符串的问题

嘿,这个问题我之前在做Android接口请求时也踩过坑!本质原因是你把单独序列化列表得到的JSON字符串直接塞进了请求对象,导致最终生成的JSON里food字段变成了带引号的字符串,而不是接口需要的数组格式。

正确的做法:让Gson序列化整个请求实体类

最规范的方式是先定义对应请求结构的数据类,然后让Gson直接序列化整个对象,这样food字段会自动被序列化为数组:

  1. 定义请求相关的数据类:
import com.google.gson.annotations.SerializedName

data class OrderRequest(
    @SerializedName("user_id") val userId: String,
    @SerializedName("restaurant_id") val restaurantId: String,
    @SerializedName("total_cost") val totalCost: String,
    @SerializedName("food") val foodItems: List<FoodItem>
)

data class FoodItem(
    @SerializedName("food_item_id") val foodItemId: String
)
  1. 构建请求对象并序列化:
// 假设listOfMenuIds是你存储菜品ID的列表(比如List<String>)
val foodList = listOfMenuIds.map { FoodItem(it) }

// 组装完整的请求对象
val orderRequest = OrderRequest(
    userId = "5665",
    restaurantId = "5",
    totalCost = "660",
    foodItems = foodList
)

// 直接序列化整个请求对象
val gson = Gson()
val requestJson = gson.toJson(orderRequest)

这样生成的requestJson就完全符合接口要求,food字段会是标准的JSON数组。

备选方案:手动构建JsonObject(适合动态字段场景)

如果因为某些原因不能使用数据类(比如请求字段是动态的),可以直接用Gson的JsonObject和JsonArray手动构建结构:

val gson = Gson()
val requestObject = JsonObject()

// 添加基础字段
requestObject.addProperty("user_id", "5665")
requestObject.addProperty("restaurant_id", "5")
requestObject.addProperty("total_cost", "660")

// 构建food对应的JsonArray
val foodArray = JsonArray()
listOfMenuIds.forEach { menuId ->
    val foodItem = JsonObject()
    foodItem.addProperty("food_item_id", menuId)
    foodArray.add(foodItem)
}

// 将数组添加到请求对象中
requestObject.add("food", foodArray)

// 最终转成JSON字符串
val requestJson = gson.toJson(requestObject)

为什么之前的做法不对?

当你调用gson.toJson(listOfMenuIds)时,得到的是一个字符串形式的JSON数组(比如"[{\"food_item_id\":\"50\"}, {\"food_item_id\":\"51\"}]"),如果把这个字符串直接赋值给请求对象的food字段,Gson在序列化整个请求时会把它当成普通字符串处理,最终就会在JSON里多一层引号,变成不符合要求的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:03:11