Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpSrRd 135 of 299 menu
◀ ▶

Чтение из строки в 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, если исходный и восстановленный объект равны.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить