Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Moshi-JsonDataException: Required value '%s' missing at $

I was working with Moshi to pull JSON data from an API and map it to my DTO Data classes when I encountered this error:

FATAL EXCEPTION: main Process: com.plcoding.weatherapp, PID: 9706 com.squareup.moshi.JsonDataException: Required value 'weatherData' missing at $ at com.squareup.moshi.internal.Util.missingProperty(Util.java:649) at com.squareup.moshi.kotlin.reflect.KotlinJsonAdapter.fromJson(KotlinJsonAdapter.kt:103) at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41)

My DTO are annotated with @field:Json(name = "xyz")

@JsonClass(generateAdapter = true)
data class WeatherDataDTO(

    @field:Json(name = "time")
    val times: List<String>,
    @field:Json(name = "temperature_2m")
    val temperatures: List<Double>)

I have enclosed the above DTO in another DTO.

JsonClass(generateAdapter = true)
data class WeatherDTO(

    @field:Json(name = "hourly")
    val weatherData: WeatherDataDTO

)

I am using the latest Retrofit and Moshi Libs on Kotlin 1.6.10

// Retrofit, Core Moshi JSON Library and Moshi's Kotlin support and converter factory
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation "com.squareup.moshi:moshi:1.12.0"
    implementation "com.squareup.moshi:moshi-kotlin:1.12.0"
    implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'

My Json endpoint looks this:

{
"latitude": 42,
"longitude": 36,
"generationtime_ms": 0.3489255905151367,
"hourly": {
"time": [],
"temperature_2m": []
.....
}

Have struggled with this error for days but cannot find a solution.

like image 778
Tonnie Avatar asked Oct 19 '25 20:10

Tonnie


1 Answers

Removing @field:Json() in favor of just @Json(name = "xyz") did the trick for me.

My DTO now looks like this and is working fine!

 @JsonClass(generateAdapter = true)
    data class WeatherDataDTO(
    
        @Json(name = "time")
        val times: List<String>,
        @Json(name = "temperature_2m")
        val temperatures: List<Double>)

Edit

Also, check the error for the required value.

For instance, the Json name was @Json(name = "name") but I had accidentally renamed it to @Json(name = "cityName").

This also causes the same exception.

For more info on @field:Json(name = "xyz") vs @Json(name = "xyz") you can review this StackOverflow question.

I also found this article to be helpful in case the Moshi-JSON Exception persists.

Happy Coding ...

like image 138
Tonnie Avatar answered Oct 22 '25 11:10

Tonnie



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!