Имя поля в Kotlin
Внешний API часто задаёт имена полей в snake_case, а в Kotlin свойства пишут в camelCase. Без пометки ключ в JSON совпадает с именем свойства, и чужой текст не разберётся.
Аннотацию @SerialName вешают на параметр конструктора
и указывают строку, которую нужно читать и писать
вместо имени свойства:
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class RemoteProfile(
@SerialName("full_name") val fullName: String,
@SerialName("age_years") val ageYears: Int
)
При записи в текст ключи будут "full_name"
и "age_years", а в коде по-прежнему
используют fullName и ageYears:
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class RemoteProfile(
@SerialName("full_name") val fullName: String,
@SerialName("age_years") val ageYears: Int
)
fun main() {
val raw = """{"full_name":"Ann","age_years":30}"""
val profile = Json.decodeFromString<RemoteProfile>(raw)
println(profile.fullName)
println(Json.encodeToString(profile))
}
Разбор принимает только ожидаемые ключи из аннотаций. Обратная запись снова отдаёт тот же формат, который ждёт сервер или файл конфигурации.
Сделайте @Serializable data class
SensorRow: свойство deviceId
в JSON должно называться "device_id",
readingC - "temp_c". Разберите
строку {"device_id":"s1","temp_c":21.5}
и выведите оба поля.
Создайте SensorRow с идентификатором
"s9" и температурой 18.0,
запишите объект в текст и убедитесь, что в строке
есть ключи "device_id" и "temp_c"
без camelCase-имён свойств.