Чтение из строки в Kotlin
Текст JSON хранит только данные, без методов класса.
Функция Json.decodeFromString принимает строку и
тип Kotlin, проверяет ключи и типы значений, затем
вызывает конструктор data class.
Пусть в памяти уже есть готовая строка с описанием склада. Её можно разобрать без предварительной записи того же объекта:
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class StorageUnit(val code: String, val capacity: Int)
fun main() {
val raw = """{"code":"W-3","capacity":40}"""
val unit = Json.decodeFromString<StorageUnit>(raw)
println(unit.code)
println(unit.capacity)
}
После разбора поля доступны как у обычного экземпляра:
code и capacity совпадают с тем, что
было в JSON. Пара типа в угловых скобках указывает,
к какому @Serializable классу относится текст.
Круг «запись - чтение» часто проверяют на одном объекте: сначала получают строку, затем восстанавливают значение и сравнивают поля:
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class StorageUnit(val code: String, val capacity: Int)
fun main() {
val original = StorageUnit("W-9", 12)
val raw = Json.encodeToString(original)
val restored = Json.decodeFromString<StorageUnit>(raw)
println(original == restored)
}
Для корректного JSON вывод будет true: восстановленный
StorageUnit совпадает с исходным по правилам
data class. Если в тексте лишний ключ или неверный
тип числа, разбор завершится ошибкой сериализации.
Объявите @Serializable data class
Badge с полями label и level.
Из строки {"label":"pro","level":2}
получите объект и выведите оба поля на отдельных
строках.
Создайте Badge с меткой "trial"
и уровнем 0, запишите его в текст, затем
разберите текст обратно. Выведите true,
если исходный и восстановленный объект равны.