为什么我不能使用 Gson 从 json 获取嵌套数据?
Why can't I fetch nested data from json using Gson?
我有一个 json 我从一个 API 中获取,如下所示:
{"success":true,"message":"","result":{"Bid":6886.97100000,"Ask":6891.58500000,"Last":6891.58500000}}
我只想在 class.
的字段中保存买价和卖价
首先,我像这样解析整个 json:
val response = sendRequest(url))
val gson = Gson()
val ticker : MarketTickerEntity = gson.fromJson(response, MarketTickerEntity::class.java)
然后我尝试在我的 class 初始化块中解析它并重新分配给出价和要价字段。
我的class:
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
我无法克服它,所以我编写了自己的函数来手动解析 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
}
我有一个 json 我从一个 API 中获取,如下所示:
{"success":true,"message":"","result":{"Bid":6886.97100000,"Ask":6891.58500000,"Last":6891.58500000}}
我只想在 class.
的字段中保存买价和卖价首先,我像这样解析整个 json:
val response = sendRequest(url))
val gson = Gson()
val ticker : MarketTickerEntity = gson.fromJson(response, MarketTickerEntity::class.java)
然后我尝试在我的 class 初始化块中解析它并重新分配给出价和要价字段。
我的class:
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
我无法克服它,所以我编写了自己的函数来手动解析 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
}