我使用Moshi从服务器解析json。如果服务器发送空项默认值未设置!但是服务器没有发送该项的默认值集。
杰森:
{"percentChange": null,"change": "-2500.00","value": "130000","name": null}数据类:
@JsonClass(generateAdapter = true) data class Reference(val name:String? = "-",val value: Double,val change: Double,val percentChange: Double? = -10.0,)但是名称和percentChange的数据为null,对于percentChange应该是"-“表示名称,"-10.0”。如果服务器不发送名称和percentChange,默认值工作,但如果发送空默认值不工作!
我使用转换器-moshi:2.4.0和改造:2.4.0
发布于 2018-12-04 00:30:31
这是按照预期工作的,因为作为JSON中键的值的null文字在语义上不同于缺少键和值。
您可以为用例定制一个JsonAdapter。
@JsonClass(generateAdapter = true)
data class Reference(
@Name val name: String = "-",
val value: Double,
val change: Double,
val percentChange: Double? = -10.0
) {
@Retention(RUNTIME)
@JsonQualifier
annotation class Name
companion object {
@Name @FromJson fun fromJson(reader: JsonReader, delegate: JsonAdapter<String>): String {
if (reader.peek() == JsonReader.Token.NULL) {
reader.nextNull<Unit>()
return "-"
}
return delegate.fromJson(reader)!!
}
@ToJson fun toJson(@Name name: String): String {
return name
}
}
}
@Test fun reference() {
val moshi = Moshi.Builder()
.add(Reference)
.build()
val adapter = moshi.adapter(Reference::class.java)
val decoded = Reference("-", 130_000.toDouble(), (-2_500).toDouble(), null)
assertThat(adapter.fromJson(
"""{"percentChange": null,"change": "-2500.00","value": "130000"}"""))
.isEqualTo(decoded)
assertThat(adapter.fromJson(
"""{"percentChange": null,"change": "-2500.00","value": "130000","name": null}"""))
.isEqualTo(decoded)
}https://stackoverflow.com/questions/53515678
复制相似问题