gson 如何将对象的Kotlin数组转换为json数组并保留访问键名?

ogsagwnx  于 2022-11-06  发布在  Kotlin
关注(0)|答案(2)|浏览(453)

我有一个API,它要求json请求以特定的数组形式,其中数组对象字段是用名称访问的,然后使用Retrofit发布。请参考下面的代码:
Kotlin:

  1. class RailPoint(
  2. var railPointId,
  3. var startTime,
  4. var endTime
  5. )
  6. var rails: ArrayList<RailPoint>()
  7. rails.add(RailPointObject1)
  8. rails.add(RailPointObject2)

因此,将上面的rails数组转换为json后,应该会产生以下结果:

  1. {
  2. "railPoint[0][railPointId]": 5,
  3. "railPoint[0][startTime]": "",
  4. "railPoint[0][endTime]": "2021-10-19 07:37:19",
  5. "railPoint[1][railPointId]": 1,
  6. "railPoint[1][startTime]": "2021-10-19 07:33:37",
  7. "railPoint[1][endTime]": "2021-10-19 07:35:20",
  8. }

那么,怎样才能实现这种类型的json数组形式呢?

46qrfjad

46qrfjad1#

首先让Gson将列表序列化为一个JsonArray,然后将元素组合为一个新的JsonObject,再将该对象序列化为JSON,可以解决这个问题:

  1. val rails: List<RailPoint> = ...
  2. val gson = Gson()
  3. val railsJsonList = gson.toJsonTree(rails).asJsonArray!!
  4. val railsJsonObject = JsonObject()
  5. // Transform elements
  6. for (i in 0 until railsJsonList.size()) {
  7. val railPointJson = railsJsonList[i].asJsonObject
  8. for ((name, value) in railPointJson.entrySet()) {
  9. railsJsonObject.add("railPoint[$i][$name]", value)
  10. }
  11. }
  12. println(gson.toJson(railsJsonObject))

相关问题