it takes some effort but it is even possible to handle json-like objects with duplicated keys,
@Serializable
data class MyData(
val route: Multimap<String, String>
)
@Serializable(with = Multimap.Serializer::class)
data class Multimap<K, V>(val pairs: List<Pair<K, V>>) {
class Serializer<K, V>(val kSerializer: KSerializer<K>, val vSerializer: KSerializer<V>) : KSerializer<Multimap<K, V>> {
override val descriptor: SerialDescriptor = MapSerializer(kSerializer, vSerializer).descriptor
override fun serialize(encoder: Encoder, value: Multimap<K, V>) {
encoder.encodeCollection(descriptor, value.pairs.size) {
value.pairs.forEachIndexed { i, (k, v) ->
encodeSerializableElement(descriptor, 2 * i, kSerializer, k)
encodeSerializableElement(descriptor, 2 * i + 1, vSerializer, v)
}
}
}
override fun deserialize(decoder: Decoder): Multimap<K, V> {
val pairs = decoder.decodeStructure(descriptor) {
if (decodeSequentially()) {
val size = decodeCollectionSize(descriptor)
List(size / 2) {
val k = decodeSerializableElement(descriptor, 2 * it, kSerializer)
val v = decodeSerializableElement(descriptor, 2 * it + 1, vSerializer)
k to v
}
} else {
buildList {
while (true) {
val i = decodeElementIndex(descriptor)
if (i == CompositeDecoder.DECODE_DONE) break
val k = decodeSerializableElement(descriptor, i, kSerializer)
val j = decodeElementIndex(descriptor)
if (j == CompositeDecoder.DECODE_DONE) throw SerializationException("missing value")
val v = decodeSerializableElement(descriptor, j, vSerializer)
add(k to v)
}
}
}
}
return Multimap(pairs)
}
}
}
val myData = Json.decodeFromString(
MyData.serializer(),
"""
{
"route": {
"1644660208": "635561",
"1644660593": "523441",
"1644660829": "523461",
"1644660900": "523471",
"1644660953": "523481",
"1644660985": "523491",
"1644660208": "635561",
"1644660593": "523441",
"1644660829": "523461",
"1644660900": "523471",
"1644660953": "523481"
}
}
""".trimIndent()
)
println(myData) // => MyData(route=Multimap(pairs=[(1644660208, 635561), (1644660593, 523441), (1644660829, 523461), (1644660900, 523471), (1644660953, 523481), (1644660985, 523491), (1644660208, 635561), (1644660593, 523441), (1644660829, 523461), (1644660900, 523471), (1644660953, 523481)]))
but hopefully that is not what you are dealing with (it's not well-specified by the JSON specification how implementations should handle duplicate keys, and results do vary)