Reputation: 1
I wanted to deserialize json with Kotlin using GSON. But it returns Null. Json starts with object.
This is the Json
val json = """{
"05-04-2018": [
{
"start_datetime": "2018-04-05 20:00:00",
"event_id": "1",
"event_title": "Anna Karenina",
"city_id": "1",
"stage_name": "Cüneyt Gökçer Sahnesi",
"address": "Çayyolu Ankara"
}
],
"07-04-2018": [
{
"start_datetime": "2018-04-07 15:00:00",
"event_id": "1",
"event_title": "Anna Karenina",
"city_id": "1",
"stage_name": "Cüneyt Gökçer Sahnesi",
"address": "Çayyolu Ankara"
},
{
"start_datetime": "2018-04-07 20:00:00",
"event_id": "1",
"event_title": "Anna Karenina",
"city_id": "1",
"stage_name": "Cüneyt Gökçer Sahnesi",
"address": "Çayyolu Ankara"
}
]
}"""
Classes which include List of Events. Another one is the class of items.
data class Event (val event_id: Int,val event_title: String, val event_stage: String, val event_posterUri: String, val event_starttime: String)
data class EventArray (val dates: String, val eventArrayList: ArrayList<Event>)
And GSON part
val sadasd: EventArray = gson.fromJson(json, EventArray::class.java)
Upvotes: 0
Views: 3930
Reputation: 2156
So I understand the date is dynamic. Incase you're not able to change the API design, this is one approach.
You parse the JSON using the JsonParser
like this :
val parsedJson = JsonParser().parse(json).asJsonObject
Extract the keys from this
val keys = parsedJson.keySet();
Iterate through the keys, extract the content as a JsonArray
, and then iterate over each and map it to the class.
for (key in keys) {
var eventArray = parsedJson[key].asJsonArray
eventArray.forEach {
val event = Gson().fromJson(it.asJsonObject, Event::class.java)
print(event)
}
}
Ideally you want to have better JSON to begin with.
Upvotes: 2
Reputation: 6569
Please re-try with these data classes:
data class EventArray(
val `05-04-2018`: List<Event>,
val `07-04-2018`: List<Event>
)
data class Event(
val start_datetime: String,
val event_id: String,
val event_title: String,
val city_id: String,
val stage_name: String,
val address: String
)
With these data classes I run println(Gson().fromJson(json, EventArray::class.java))
and get:
EventArray(05-04-2018=[Event(start_datetime=2018-04-05 20:00:00, event_id=1, event_title=Anna Karenina, city_id=1, stage_name=Cüneyt Gökçer Sahnesi, address=Çayyolu Ankara)], 07-04-2018=[Event(start_datetime=2018-04-07 15:00:00, event_id=1, event_title=Anna Karenina, city_id=1, stage_name=Cüneyt Gökçer Sahnesi, address=Çayyolu Ankara), Event(start_datetime=2018-04-07 20:00:00, event_id=1, event_title=Anna Karenina, city_id=1, stage_name=Cüneyt Gökçer Sahnesi, address=Çayyolu Ankara)])
Upvotes: 0