2014-09-07 20 views
6

Có cách nào và/hoặc thư viện để tự động tạo lớp dữ liệu Kotlin từ Json như nó hoạt động trong Scala Json.Spray?Json to Kotlin Lớp dữ liệu

Something như thế này:

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) 
} 
+2

Có thể bạn sẽ thấy thú vị: http://youtrack.jetbrains.com/issue/KT-5672, [Mô-đun Kotlin cho Jackson, hỗ trợ các đối tượng bất biến] (https: //www.linkedin.com/groups/Kotlin-module-Jackson-supporting-immutable-7417237.S.5910775828316172289?trk=groups_most_popular-0-b-ttl&goback=%2Enpv_158961627_*1_*1_*1_*1_*1_*1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_ * 1_nav * 4 phản hồi * 4tab * 4profile_ * 1% 2Egmp_7417237) – bashor

+0

Bạn có thể gửi cho tôi liên kết đến tệp jar không có Maven không? – OZKA

+1

http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22jackson-module-kotlin%22 – bashor

Trả lời

1

Tại sao không sử dụng Jackson hay bất kỳ serializer khác? Nó sẽ hoạt động ..

5

Bạn có thể sử dụng mô-đun Jackson cho Kotlin để tuần tự hóa/deserialize dễ dàng từ bất kỳ định dạng nào mà Jackson hỗ trợ (bao gồm JSON). Đây là cách dễ nhất và hỗ trợ các lớp dữ liệu Kotlin mà không có chú thích. Xem https://github.com/FasterXML/jackson-module-kotlin cho mô-đun bao gồm thông tin mới nhất để sử dụng từ Maven và Gradle (bạn có thể phỏng đoán IVY và tải xuống JAR từ kho lưu trữ Maven)

Các lựa chọn thay thế như Boon, nhưng không có hỗ trợ cụ thể cho Kotlin (thường là một vấn đề với việc không có một hàm tạo mặc định) và sử dụng một số truy cập trực tiếp không an toàn cho các lớp JVM nội bộ để thực hiện. Khi làm như vậy, nó có thể sụp đổ trên một số máy ảo, và trong trường hợp bạn mở rộng Boon từ Kotlin với bộ chỉnh sửa/deserializer tùy chỉnh, nó tạo ra các giả định về các lớp không đúng trong Kotlin (lớp String được bọc ví dụ) mà tôi có nhìn thấy kết xuất lõi. Boon đang sáng nhanh, chỉ cần cẩn thận với những vấn đề này và kiểm tra trước khi sử dụng.

(lưu ý: Tôi là tác giả của các mô-đun Jackson-Kotlin)

4

Đây là rất sạch sẽ và dễ dàng trong Kotlin.

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) 
} 

sản xuất sản lượng này:

User(id=10, name=Kirill) 

bạn chỉ cần thêm video này vào pom.xml của bạn

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

Phiên bản hiện tại là '2.6.4-1' cho Kotlin beta 4 –

+0

Liên kết đến số 1- tài liệu trang cho mô-đun này: https://github.com/FasterXML/jackson-module-kotlin –

0

http://www.json2kotlin.com chuyển đổi phản hồi json của bạn thành lớp dữ liệu kotlin trực tuyến mà không cần cài đặt bất kỳ plugin nào. Tùy chọn, bạn cũng có thể tạo chú thích gson. (Tiết lộ: Tôi đã tạo tiện ích này)