возникли проблемы с десериализацией этого вызова GET с использованием moshi
https://min -api.cryptocompare.com / data / pricemultifull? Fsyms = 007,1337 & tsyms = EUR, USD результат выглядит следующим образом.
{
"RAW":{
//not used
},
"DISPLAY":{
"1337":{
"EUR":{
"FROMSYMBOL":"1337",
"TOSYMBOL":"€",
"MARKET":"CryptoCompare Index",
"PRICE":"€ 0.0001115",
"LASTUPDATE":"Just now",
"LASTVOLUME":"1337 0",
"LASTVOLUMETO":"€ 0",
"LASTTRADEID":0,
"VOLUMEDAY":"1337 0",
"VOLUMEDAYTO":"€ 0",
"VOLUME24HOUR":"1337 0",
"VOLUME24HOURTO":"€ 0",
"OPENDAY":"€ 0.0001018",
"HIGHDAY":"€ 0.0001115",
"LOWDAY":"€ 0.0001018",
"OPEN24HOUR":"€ 0.0001115",
"HIGH24HOUR":"€ 0.0001115",
"LOW24HOUR":"€ 0.0001018",
"LASTMARKET":"Yobit",
"CHANGE24HOUR":"€ 0.0",
"CHANGEPCT24HOUR":"0.00",
"CHANGEDAY":"€ 0.0000097",
"CHANGEPCTDAY":"9.52",
"SUPPLY":"1337 28,988,904,177.4",
"MKTCAP":"€ 3,232.91 K",
"TOTALVOLUME24H":"1337 1,360.28 K",
"TOTALVOLUME24HTO":"€ 151.70"
},
"USD":{
"FROMSYMBOL":"1337",
"TOSYMBOL":"$",
"MARKET":"CryptoCompare Index",
"PRICE":"$ 0.0001490",
"LASTUPDATE":"4 hours ago",
"LASTVOLUME":"1337 12,553.1",
"LASTVOLUMETO":"$ 1.87",
"LASTTRADEID":"200003428",
"VOLUMEDAY":"1337 19,183.0",
"VOLUMEDAYTO":"$ 2.81",
"VOLUME24HOUR":"1337 28,256.0",
"VOLUME24HOURTO":"$ 3.95",
"OPENDAY":"$ 0.0001250",
"HIGHDAY":"$ 0.0001490",
"LOWDAY":"$ 0.0001250",
"OPEN24HOUR":"$ 0.0001250",
"HIGH24HOUR":"$ 0.0001490",
"LOW24HOUR":"$ 0.0001250",
"LASTMARKET":"Yobit",
"CHANGE24HOUR":"$ 0.000024",
"CHANGEPCT24HOUR":"19.20",
"CHANGEDAY":"$ 0.000024",
"CHANGEPCTDAY":"19.20",
"SUPPLY":"1337 28,988,904,177.4",
"MKTCAP":"$ 4,319.35 K",
"TOTALVOLUME24H":"1337 1,360.28 K",
"TOTALVOLUME24HTO":"$ 202.43"
}
},
"007":{
"EUR":{
"FROMSYMBOL":"007",
"TOSYMBOL":"€",
"MARKET":"CryptoCompare Index",
"PRICE":"€ 1.08",
"LASTUPDATE":"Just now",
"LASTVOLUME":"007 0",
"LASTVOLUMETO":"€ 0",
"LASTTRADEID":0,
"VOLUMEDAY":"007 0",
"VOLUMEDAYTO":"€ 0",
"VOLUME24HOUR":"007 0",
"VOLUME24HOURTO":"€ 0",
"OPENDAY":"€ 1.08",
"HIGHDAY":"€ 1.08",
"LOWDAY":"€ 1.08",
"OPEN24HOUR":"€ 1.08",
"HIGH24HOUR":"€ 1.08",
"LOW24HOUR":"€ 1.08",
"LASTMARKET":"Yobit",
"CHANGE24HOUR":"€ 0.0",
"CHANGEPCT24HOUR":"0.00",
"CHANGEDAY":"€ -0.00013",
"CHANGEPCTDAY":"-0.01",
"SUPPLY":"007 0",
"MKTCAP":"€ 0",
"TOTALVOLUME24H":"007 0",
"TOTALVOLUME24HTO":"€ 0"
},
"USD":{
"FROMSYMBOL":"007",
"TOSYMBOL":"$",
"MARKET":"CryptoCompare Index",
"PRICE":"$ 6.51",
"LASTUPDATE":"4 months ago",
"LASTVOLUME":"007 0.01536",
"LASTVOLUMETO":"$ 0.1000",
"LASTTRADEID":"182056756",
"VOLUMEDAY":"007 0",
"VOLUMEDAYTO":"$ 0",
"VOLUME24HOUR":"007 0",
"VOLUME24HOURTO":"$ 0",
"OPENDAY":"$ 6.51",
"HIGHDAY":"$ 6.51",
"LOWDAY":"$ 6.51",
"OPEN24HOUR":"$ 6.51",
"HIGH24HOUR":"$ 6.51",
"LOW24HOUR":"$ 6.51",
"LASTMARKET":"Yobit",
"CHANGE24HOUR":"$ 0.0",
"CHANGEPCT24HOUR":"0.00",
"CHANGEDAY":"$ -0.00034",
"CHANGEPCTDAY":"-0.01",
"SUPPLY":"007 0",
"MKTCAP":"$ 0",
"TOTALVOLUME24H":"007 0",
"TOTALVOLUME24HTO":"$ 0"
}
}
}
}
получая следующую ошибку.
com.squareup.moshi.JsonDataException: Required value 'displayMapToCurrency'
missing at $.DISPLAY.1337
я использую следующие классы данных, один оборачивая другой
// внешний класс
data class FullPriceWrapper(
@Json( name = "DISPLAY")
val DISPLAY : Map<String, FullPriceWrapperInternalDisplay>
)
// промежуточный класс
data class FullPriceWrapperInternalDisplay(
val displayMapToCurrency : Map<String,CurrencyFullPriceDataDisplay>
)
// самый внутренний класс
data class CurrencyFullPriceDataDisplay(
@Json(name = "FROMSYMBOL")
val FROMSYMBOL: String,
@Json(name = "TOSYMBOL")
val TOSYMBOL: String,
@Json(name = "MARKET")
val MARKET: String)
, поэтому я предполагаю, что промежуточный класс здесь не создаетсясообщение об ошибке?Есть ли проблема в моши с вложенными классами?Я создаю свой экземпляр API с модификацией, как показано ниже, передавая MoshiConverterFactory.
return Retrofit.Builder()
.baseUrl(compareApiEndPoint)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(MoshiConverterFactory.create(moshi))
.build().create(CryptoApi::class.java)
Я также попробовал аннотацию генерации кода для создания адаптеров для меня в каждом классе, но без радости.адаптеры генерируются.может быть, я неправильно понял, но я подумал, что они были сгенерированы автоматически с аннотацией?(показано ниже)
@JsonClass(generateAdapter = true)
Но я думаю, что в настоящее время я недостаточно знаком с библиотекой.Мне интересно, если мне нужно добавить пользовательский адаптер, как я видел в других примерах?Я также пробовал это, но я не уверен, как создать эти адаптеры из примеров, которые я видел?Если у кого-то есть идеи, как исправить эту ошибку, это было бы здорово!Также я надеюсь, что вопрос был относительно точным.Спасибо!