#kotlin #deserialization #kotlinx.serialization
#котлин #десериализация #kotlinx.сериализация
Вопрос:
Привет, я новичок в сериализации kotlinx, и я использую KMP, мои требования немного отличаются
мой класс данных
@Serializable класс данных Студент (имя значения: Строка , возраст значения : Int)
и мой простой JSON был бы «[‘Avinash’, 22]».,
который должен быть десериализован в Student(«Avinash», 22)
Я не могу десериализовать его, кто-нибудь может мне помочь
Комментарии:
1. Как указывали другие, ваш «простой JSON» не является правильно сформированным JSON
Ответ №1:
Хотя входные данные, такие как [Avinash, 22]
неправильно сформированный Json, вы все равно можете работать с ним, анализируя его в JsonElement
:
import kotlinx.serialization.json.*
data class Student(val name: String, val age: Int)
fun decode(stringData: String, parser: Json): List<Student> {
val element: JsonArray = parser.parseToJsonElement(stringData).jsonArray
return element.windowed(2, 2).map {
Student(
it[0].toString(),
it[1].toString().toInt()
)
}
}
fun main() {
val parser = Json { isLenient = true }
val students = decode("[A, 22, B, 33, C, 44]", parser)
println(students)
// [Student(name=A, age=22), Student(name=B, age=33), Student(name=C, age=44)]
}
Ответ №2:
Попробуйте это:
val student: Student = Json.decodeFromString("{"name": "Avinash", "age": "22"}")
Обратите внимание, как форматировать строку JSON.
[]
квадратные скобки предназначены для массивов{}
фигурные скобки предназначены для объектов
И вы должны указать имя своего поля и использовать двойные кавычки для полей и значений или использовать менее строгую Json
десериализацию:
val json = Json {
isLenient = true
}
val student: Student = json.decodeFromString("{name: Avinash, age: 22}")
Если вы хотите получить глубокое представление о схеме json, вы можете прочитать здесь .
Комментарии:
1. привет @shadowsheep, спасибо за предложение :), мне действительно нужно десериализовать массив значений в объект, мы пытаемся уменьшить использование данных, поэтому мы получаем значения в массивах, которые я просил. Есть ли какой-либо способ сделать это?
2. @avinashsaipavanmunnangi это нестандартный способ десериализации объекта. На самом деле, первое, что приходит мне в голову, это десериализовать его как массив строк, а затем написать свою пользовательскую функцию сопоставления, которая создает ваши объекты.