我正在做一個專案,我需要每天訪問一次貨幣匯率,所以我正在嘗試使用這個json。
要閱讀本文,我只是獲取 URL 的文本,然后嘗試使用 JSONReader 進行反序列化。
val url = URL("https://www.floatrates.com/daily/usd.json")
val stream = url.openStream()
url.readText()
val jsonReader = JsonReader(InputStreamReader(stream))
jsonReader.isLenient = true
jsonReader.beginObject()
while (jsonReader.hasNext()) {
val codeName:String = jsonReader.nextName()
jsonReader.beginObject();
var code:String? = null
var rate = 0.0
while (jsonReader.hasNext()) {
val name:String = jsonReader.nextName()
when(name){
"code" -> {
code = jsonReader.nextString()
break
}
"rate" -> {
rate = jsonReader.nextDouble()
break
}
else -> {
jsonReader.skipValue()
}
}
code?.let {
rates?.set(it, rate)
}
}
}
jsonReader.endObject();
當我運行代碼時,我得到:
Expected BEGIN_OBJECT but was STRING
在
jsonReader.beginObject();
當我嘗試使用 Gson 時,使用以下代碼:
var url = URL("https://www.floatrates.com/daily/usd.json").readText()
//url = "[${url.substring(1, url.length - 1)}]"
val gson = Gson()
val currencies:Array<SpesaCurrency> = gson.fromJson(url, Array<SpesaCurrency>::class.java)
我收到此錯誤:
Expected BEGIN_OBJECT but was STRING at line 1 column 3 path $[0]
在:
gson.fromJson(url, Array<SpesaCurrency>::class.java)
SpesaCurrency.kt 看起來像這樣:
class SpesaCurrency(
val code:String,
val alphaCode:String,
val numericCode:String,
val name:String,
val rate:Float,
val date:String,
val inverseRate:Float
)
任何幫助是極大的贊賞。
uj5u.com熱心網友回復:
我認為有一個
jsonReader.endObject();
在您的代碼中丟失。這種不平衡導致程式在讀取第一個物件后失敗。在內部之后添加它
while (jsonReader.hasNext()) {
...
}
環形。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/403342.html
標籤:
