Bạn nên sử dụng thư viện xử lý tuần tự hóa/deserialization. Tôi sẽ cân nhắc chọn giữa Spray Json và Play Json.
Tôi sẽ giải thích cho bạn về cách quy trình hoạt động với Phát lần đầu tiên và nó tương tự như trong Phun.
Hãy nói rằng bạn có một lớp học, và một đối tượng với một thể hiện và một json như chuỗi:
case class MyClass(id: Int,
name: String,
description: String)
object Data {
val obj: MyClass = MyClass(1, "me", "awesome")
val str: String =
"""
|{
| "id": 1,
| "name": "me",
| "description": "awesome"
|}
""".stripMargin
}
Đối MyClass
được serialized/deserialized, bạn sẽ cần một định dạng ngầm, cụ thể cho điều này, vì vậy bạn sẽ tạo một đối tượng chứa trình định dạng này bằng cách sử dụng Phát.
trait MyClassPlayProtocol {
implicit val formatAbility = Json.format[Ability]
}
object MyClassPlayProtocol extends MyClassPlayProtocol
Các serialization/deserialization sẽ giống như thế này:
object PlayData {
import play.api.libs.json.JsValue
import play.api.libs.json.Json
import MyClassPlayProtocol._
import General._
val str2Json: JsValue = Json.parse(str)
val obj2Json: JsValue = Json.toJson(obj)
val json2Str: String = Json.stringify(str2Json)
val json2Obj: MyClass = obj2Json.as[MyClass]
}
Trong Phun, giao thức sẽ trông như thế này:
trait MyClassSprayProtocol extends DefaultJsonProtocol {
implicit val myClassFormat = jsonFormat3(MyClass)
}
object MyClassSprayProtocol extends MyClassSprayProtocol
và serialization/deserialization:
object SprayData {
import spray.json._
import MyClassSprayProtocol._
import General._
val str2Json: JsValue = str.parseJson
val obj2Json: JsValue = obj.toJson
val json2Str: String = str2Json.compactPrint
val json2Obj: MyClass = obj2Json.convertTo[MyClass]
}
Như bạn có thể thấy, nó chủ yếu là vấn đề được lựa chọn giữa hai điều này. Cả hai vẫn đang được cải thiện và có thể sẽ trong tương lai gần.
Tùy thuộc vào điểm chuẩn, bạn sẽ thấy rằng giá trị này tốt hơn giá trị kia bằng vài miligiây (thường là Phun).
Tôi cho 01:00 sử dụng Phun tại nơi làm việc và Chơi trong một số dự án cá nhân, và tôi không thể nói rằng tôi tìm thấy một cái gì đó hoàn toàn khác nhau từ một đến khác.
EDIT:
Và để cuối cùng trả lời câu hỏi của bạn, để đi MyClass
-String
(serialization), bạn sẽ làm điều gì đó như thế này:
PLAY: Json.stringify(Json.toJson(myClass))
SPRAY: myClass.toJson.compactPrint
Và deserialization:
PLAY: Json.parse(string).as[MyClass]
SPRAY: myClass.parseJson.convertTo[MyClass]
Không rõ bạn đang hỏi gì. Bạn đang cố gắng đi từ một lớp Scala đến một chuỗi JSON? Bạn có thể đăng lớp scala/pobject bạn đang cố gắng chuyển đổi không? – djechlin
Không, tôi không muốn chuyển đổi một lớp Scala thành chuỗi JSON. Tôi muốn tạo một JSON hợp lệ từ Scala. – Paladini
"Scala" nghĩa là gì? – djechlin