Scala Pickling для сериализации и десериализации Json?

Для моего проекта, dijon, мне было интересно, возможно ли использовать травление Scala для сериализации и десериализации JSON. В частности, я хочу что-то вроде этого def toJsonString(json: JSON, prettyPrint: Boolean = false): String а также def fromJsonString(json: String): JSON, Как я могу использовать травление для создания этих двух вспомогательных методов?

2 ответа

Решение

Это действительно зависит от того, что наиболее удобно для вашего использования. Это грубые наброски вариантов, которые у вас есть:

 import scala.pickling._, json._    

 // Uses macros implicitly on Scope
 def toJSONString[A](obj: A, prettyPrint: Boolean = false)(implicit pickler: A => JSONPickle) = {
    val json = pickler(obj)
    myPrettyPrinter.print(json.value, prettyPrint)
 }

 // Uses macros defined elsewhere
 def toJSONString(obj: Any, prettyPrint: Boolean = false) = {
    val json = classToPicklerMap(obj.getClass)(obj)
    myPrettyPrinter.print(json.value, prettyPrint)
 }

 // Uses runtime reflection
 def toJSONString(obj: Any, prettyPrint: Boolean = false) = {
    val json = obj.pickle
    myPrettyPrinter.print(json.value, prettyPrint)
 }

 // Uses macros implicitly on scope
 def fromJSONString[A](json: String)(implicit unpickler: JSONPickle => A): A = {
    unpickler(JSONPickle(json))
 }

 // Uses macros defined elsewhere #1
 def fromJSONString[A](json: String)(implicit c: ClassTag[A]) = {
    classnameToUnpicklerMap(c.runtimeClass.getName)(json).asInstanceOf[A]
 }

 // Uses macros defined elsewhere #2
 def fromJSONString(json: String): Any = {
    val className = parseClassName(json) // Class name is stored in "tpe" field in the JSON    
    classnameToUnpicklerMap(className)(json)
 }

 // Uses runtime reflection
 def fromJSONString(json: String) = JSONPickler(json).unpickle

Я не использовал Scala Pickling, но в репозитории Github говорится, что он находится на ранней стадии разработки. Вы также можете попробовать спрей JSON. Он поддерживает то, что вам нужно.

Другие вопросы по тегам