GSON未将嵌套的JSON对象解析为值

问题描述 投票:0回答:1

您好,我正在使用GSON来分析包含以下JSON的路由对象:

{
  "mapOverlays": [
    {
      "id": 1,
      "route": 73,
      "url": "https://en.wikiarquitectura.com/wp-content/uploads//2017/01/White_House_distr_2C2BA.png",
      "lat": 0.00,
      "lng": 0.00,
      "width": 2000,
      "height": 1335,
      "scale": 1,
      "constraints": {
        "w": [
          0.00,
          0.00
        ],
        "x": [
          0.00,
          0.00
        ],
        "y": [
          0.00,
          0.00
        ]
      },
      "flags": ""
    }
  ]
}

问题是,当我尝试访问constraints的JsonObject时,我得到一个空的JSONObject。

这里是底图的数据模型类。

import com.google.gson.JsonObject
import com.travelstorysgps.travelstoryssdk.extensions.md5
import java.io.Serializable

class Basemap (

    val id: Int,
    val route: Int,
    val url: String,
    val lat: Double,
    val lng: Double,
    val width: Int,
    val height: Int,
    val scale: Double,
    val constraints : JsonObject ,
    val flags: String
) : Serializable {
    val filename: String
        get() = url.md5() + ".file"

}

这是我调用Basemap.constraints时得到的输出:I/System.out: [BASEMAP]: {}它应包含名为w,x和y的JSONArray。

我的数据模型类有问题吗?

编辑:这是父Route对象:

package com.travelstorysgps.travelstoryssdk.data.model

import android.content.Context
import com.travelstorysgps.travelstoryssdk.data.Location
import java.io.Serializable
import java.util.*
import kotlin.math.floor

data class Route(
    val route: RouteDefinition,
    val tracks: List<Track>,
    val geotags: List<Geotag>,
    val images: List<Image>,
    val music: List<Music>,
    val assets: AssetList,
    val orgs: List<Organization>,
    val mapOverlays: List<Basemap>,
    val ecoupons: List<Coupon>,
    var distance: Int,
    var routeKey: String = "",
    var isDownloading: Boolean = false
) : Serializable {
    val artists: List<Int>
        get() = music.map { it.artist }.distinct()

}```
json kotlin nested is-empty
1个回答
0
投票

Basemap对象包装在mapOverlays数组字段下的父JSON对象中。您需要一个附加的类以反序列化适当的结构。

data class Parent(val mapOverlays: List<Basemap>)

fun someFn(json: String) {

  val parent = Gson().fromJson(json, Parent::class.java)
  println(parent.mapOverlays[0].constraints)
}
© www.soinside.com 2019 - 2024. All rights reserved.