È necessario utilizzare una libreria che gestisca la serializzazione/deserializzazione. Vorrei prendere in considerazione la scelta tra Spray Json e Play Json.
Vi spiegherò come funziona il processo con Riproduzione prima ed è molto simile a quello in Spray.
Diciamo che dispone di una classe, e un oggetto con un'istanza ed un JSON come stringa:
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
}
Per MyClass
essere serializzato/deserializzata, avrete bisogno di un formattatore implicita, specifico per questo, in modo creerai un oggetto che contiene questo formattatore utilizzando Riproduci.
trait MyClassPlayProtocol {
implicit val formatAbility = Json.format[Ability]
}
object MyClassPlayProtocol extends MyClassPlayProtocol
La serializzazione/deserializzazione sarà simile a questo:
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]
}
In Spray, il protocollo sarà simile a questa:
trait MyClassSprayProtocol extends DefaultJsonProtocol {
implicit val myClassFormat = jsonFormat3(MyClass)
}
object MyClassSprayProtocol extends MyClassSprayProtocol
e la serializzazione/deserializzazione:
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]
}
Come potete vedere, è principalmente una questione di scelta tra questi due. Entrambi sono ancora migliorati e probabilmente lo saranno nel prossimo futuro.
A seconda del benchmark, troverete che uno è migliore rispetto all'altro di pochi millisecondi (di solito Spray).
Io per primo sono utilizzando Spray al lavoro e Gioca in alcuni progetti personali, e non posso dire che ho trovato qualcosa di fondamentalmente diverso da uno all'altro.
EDIT:
E per rispondere finalmente alla tua domanda, per andare MyClass
-String
(serializzazione), si farà qualcosa di simile:
PLAY: Json.stringify(Json.toJson(myClass))
SPRAY: myClass.toJson.compactPrint
E la deserializzazione:
PLAY: Json.parse(string).as[MyClass]
SPRAY: myClass.parseJson.convertTo[MyClass]
Non è chiaro cosa stai chiedendo. Stai cercando di passare da una classe Scala a una stringa JSON? Puoi pubblicare la scala classe/pobject che stai cercando di convertire? – djechlin
No, non voglio convertire una classe Scala in una stringa JSON. Voglio creare un JSON valido da Scala. – Paladini
Cosa significa "da Scala"? – djechlin