Как частично декодировать строку JSON с помощью kotlinx.serialization?

#json #kotlin #serialization #kotlinx.serialization

#json #kotlin #сериализация #kotlinx.serialization

Вопрос:

У меня есть строка JSON, которая выглядит как {"code": "FOO"} .

Теперь я хочу десериализовать эту строку с помощью kotlinx.serialization . Я пробовал следующее:

 import kotlinx.serialization.*

@Serializable
data class Result(val code: String?)

val decoded = Json.decodeFromString<Result>(jsonString)
  

Это работает, когда JSON содержит только code , но на самом деле внутри строки JSON могут быть другие ключи (это вне моего контроля). Меня волнует только code ключ, но когда присутствуют другие ключи, мое приложение вылетает.

Как мне декодировать только соответствующие ключи JSON?

Ответ №1:

После дальнейшей отладки моего приложения я обнаружил следующую ошибку:

Исключение JsonDecodingException: неожиданный токен JSON со смещением 14: обнаружена ошибка неизвестного ключа. Используйте ‘ignoreUnknownKeys = true’ в конструкторе ‘Json {}’, чтобы игнорировать неизвестные ключи. Ввод JSON: {«code»: «FOO», «otherKey»: «Что-то еще»}

Я не смог найти никакой документации по этому вопросу, но мне удалось решить эту проблему, изменив свой код на следующий:

 import kotlinx.serialization.*

@Serializable
data class Result(val code: String?)

val decoded = Json { ignoreUnknownKeys = true }.decodeFromString<ErrorResponse>(jsonString)
  

Комментарии:

1. Документация находится здесь github.com/Kotlin/kotlinx.serialization/blob/master/docs /…