Json to Kotlin Класс данных

Есть ли способ и / или библиотека для автоматического создания класса данных Kotlin из Json, как это работает в Scala Json.Spray?

Что-то вроде этого:

data class User(id: Int, name: String) class DataClassFactory(val json: String) { fun getUser(): User { //some reflection return User(10, "Kirill") } } fun main(args: Array<String>): Unit { val json = "{id: 10, name: Kirill}" val usr = DataClassFactory(json).getUser() println(usr) } 

Вы можете использовать модуль Jackson для Kotlin для сериализации / десериализации легко из любого формата, поддерживаемого Jackson (включая JSON). Это самый простой способ и поддерживает классы данных Kotlin без аннотаций. См. https://github.com/FasterXML/jackson-module-kotlin для модуля, который включает в себя самую последнюю информацию для использования с Maven и Gradle (вы можете сделать вывод о том, что IVY и загрузить JAR из репозиториев Maven)

Существуют альтернативы, такие как Boon, но у него нет конкретной поддержки для Kotlin (обычно это проблема с отсутствием конструктора по умолчанию) и использует некоторый небезопасный прямой доступ к внутренним классам JVM для повышения производительности. При этом он может упасть на некоторые виртуальные машины, и в тех случаях, когда вы расширяете Boon из Kotlin с помощью специального сериализатора / десериализатора, он делает предположения о классах, которые не соответствуют действительности в Kotlin (например, класс String) видел свалку ядра. Boon светится быстро, просто будьте осторожны с этими проблемами и сначала проверьте перед использованием.

(примечание: я являюсь создателем модуля Джексона-Котлина)

Это очень чисто и удобно в Котлине.

 import com.fasterxml.jackson.module.kotlin.* data class User(val id: Int, val name: String) fun main(args: Array<String>) { val mapper = jacksonObjectMapper() val json = """{"id": 10, "name": "Kirill"}""" val user = mapper.readValue<User>(json) println(user) } 

производит этот вывод:

 User(id=10, name=Kirill) 

вам просто нужно добавить это в свой pom.xml

  <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-kotlin</artifactId> <version>2.6.3-4</version> </dependency> 

Почему бы не использовать Jackson или какой-либо другой сериализатор? Он должен работать..

Что относительно этого Это переводчик, который переводит строку JSON в класс данных kotlin, он делает это через плагин, см. Следующий демонстрационное использование https://plugins.jetbrains.com/plugin/9960-jsontokotlinclass

http://www.json2kotlin.com преобразует ваш ответ json в классы данных kotlin онлайн, без необходимости устанавливать какой-либо плагин. Кроме того, вы можете создавать аннотации gson. (Раскрытие: я создал эту утилиту)

Intereting Posts
используя Gson в kotlin для анализа json-массива Android RxJava: объединение двух запросов и выполнение некоторой логики между ними AndroidStudio ExternalSystemException с kotlin 0.12.213 Загрузка изображения в правильное положение в режиме ресайклера Функция аннотирования интерфейса, которая должна вызывать супер Выравнивание двух кнопок по горизонтали программно с использованием компоновки ограничений Ошибка возврата в Single Вызов метода Java из Kotlin со списком параметров Расшифровка значительно медленнее по сравнению с шифрованием на Android В Kotlin, как я могу обойти конфликты наследуемых объявлений, когда класс enum реализует интерфейс? Ассоциированная сертификация разработчика Android Возможно ли сделать фон макета активности прозрачным в kotlin android поделиться текстом в студии android с помощью kotlin Как высмеять финальный класс с Mockito 2 на Java-модуле в Android-проекте? Как сделать multiconditional для цикла в kotlin