0

使用 moshi 从这个 GET 调用反序列化有点问题

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)

所以我假设中间类没有从错误消息中实例化?嵌套类的moshi有问题吗?我通过 MoshiConverterFactory 的改造创建了我的 api 实例,如下所示。

return Retrofit.Builder()
            .baseUrl(compareApiEndPoint)
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(MoshiConverterFactory.create(moshi))
            .build().create(CryptoApi::class.java)

我还尝试了代码生成注释来为每个类创建适配器,但没有任何乐趣。生成适配器。也许我有错误的想法,但我认为这些是使用注释自动生成的?(如下图)

@JsonClass(generateAdapter = true)

但我想我目前对图书馆还不够熟悉。我想知道是否需要像在其他示例中看到的那样添加自定义适配器?我也试过这个,但我不知道如何从我看到的例子中创建这些适配器?如果有人对如何纠正此错误有任何想法,那就太好了!我也希望这个问题相对准确。谢谢!

4

0 回答 0