Home > front end >  Android- Json object come as object or array
Android- Json object come as object or array

Time:09-26

I have this json response from the api, and the response can't be change

data class Weather (
  val category: String,
  val id: String,
  val meta: Meta
)


data class Meta (
  val id: String,
  val name: String,
  val details: String
)

Json respose

  { 
   "weather" : {
      "category": "articles",
      "id": "1",
      "meta": {
         "id": "1",
         "name": "The shortest article. Ever.",
         "details": "see"
    },
    "weather" : {
      "category": "articles",
      "id": "2",
      "meta": []
   }

If meta is empty, it come with an array but if not empty, it come with object.

Retrofit throws

  com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY 

the api can't be modify so this has to be fix on client end. How can I solve this

CodePudding user response:

You can not make this possible

meta object must be an object when have value and null when do not have any value, or an array with value when exist and empty when not exist.

meta can not be an array and object in the same time. this is very bad mistake from who created this response body.

CodePudding user response:

You can use Any type for meta. and put check at your code level like this.

 data class Weather (
      val category: String,
      val id: String,
      val meta: Any
    )

   

     if(meta is Meta) 
        parse it to your Meta object 
        else
        parse it to list
  • Related