为什么我不能使用Gson从json中获取嵌套数据? [英] Why can't I fetch nested data from json using Gson?

查看:99
本文介绍了为什么我不能使用Gson从json中获取嵌套数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个从API中获取的json,如下所示:

I have a json I fetch from an API that looks like this:

{"success":true,"message":"","result":{"Bid":6886.97100000,"Ask":6891.58500000,"Last":6891.58500000}}

我只想将Bid和Ask值保存在班级字段中.

首先,我像这样解析整个json:

First I parse whole json like this:

   val response = sendRequest(url))
   val gson = Gson()
   val ticker : MarketTickerEntity = gson.fromJson(response, MarketTickerEntity::class.java)

然后我尝试在类init块中解析它,然后重新分配以竞标和询问字段.

And then I try to parse it inside of my class init block and reassign to bid and ask fields.

我的课:

class MarketTickerEntity(@SerializedName("result")val result: JsonObject? = null) : TickerEntity {

  override val fee: Double = 0.0001
  override var bid: Double = 0.0
  override var ask: Double = 0.0

  data class ResultData (
    val Bid: Double,
    val Ask: Double,
    val Last: Double
  )

  init {
    if(result != null) {
      val gson = Gson()
      val res: ResultData = gson.fromJson(result, ResultData::class.java)
      bid = res.Bid
      ask = res.Ask
    }
  }

}

但是不幸的是结果始终为空.

But unfortunately result is always null.

我尝试更改JsonObject吗?串?结果类型,然后出现错误:

I have tried changing JsonObject? to String? in result type and then I get the error:

Expected a string but was BEGIN_OBJECT at line 1 column 40 path $.result

推荐答案

我无法克服它,所以我手动编写了自己的函数来解析通过的json.

I couldn't get over it so I wrote my own function manually parsing a json I pass.

  override fun receiveJson(json: String){
    val gson = Gson()
    val tickerJson: JsonObject = gson.fromJson(json, JsonObject::class.java)
    val resultJson: JsonObject = gson.fromJson(tickerJson.get("result"), JsonObject::class.java)
    bid = resultJson.get("Bid").asDouble
    ask = resultJson.get("Ask").asDouble
  }

这篇关于为什么我不能使用Gson从json中获取嵌套数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆