Почему я не могу получить вложенные данные из json с помощью Gson? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть json Я получаю из API, который выглядит следующим образом:

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

Все, что я хочу, это просто сохранить значения Bid и Ask в полях класса.

Сначала я анализирую целое json следующим образом:

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

А затем я пытаюсь проанализировать его внутри моего блока инициализации класса и переназначить поля bid и ask.

Мой класс:

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
    }
  }

}

Но, к сожалению, результат всегда равен нулю.

Я пытался изменить JsonObject? нанизывать? в типе результата, а затем я получаю ошибку:

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

1 Ответ

0 голосов
/ 25 апреля 2020

Я не мог пройти через это, поэтому я написал свою собственную функцию, вручную анализируя json Я передаю.

  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
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...