Scala unpickling from string
scala, scala-pickling
Solution
You should use
{
"tpe": "java.lang.String",
"value": "elem 1"
}
without `JSONPickle(...)`:
val json = """{
"tpe": "java.lang.String",
"value": "elem 1"
}"""
JSONPickle(json).unpickle[String]
// String = elem 1
`JSONPickle({...})` is not a valid `JSON`.
You should also use `pckl.value` instead of `pckl.toString` to get `JSON` without `JSONPickle(...)`:
val src = "elem 1"
val pckl = src.pickle
val pckl2 = JSONPickle(pckl.value)
pckl2.unpickle[String]
// String = elem 1
You could also use pattern matching like this:
val src = "elem 2"
val pckl = src.pickle
val pckl2 = pckl match {
case JSONPickle(value) => JSONPickle(value)
}
pckl2.unpickle[String]
// String = elem 2
Problem
I tried the following Unit Test. First test `testUnpickleJsonPickleFormat` works well. It pickles a String and unpickle the pickle. `testUnpickleString{1,2}` tests to unserialize a String. But they don't work at all. I don't know where something miss me. ``` import org.junit.Test import scala.pickling._ import scala.pickling.json._ class PicklerTest { @Test def testUnpickleJsonPickleFormat { val src = "elem 1" val pckl = src.pickle val res = pckl.unpickle[String] println(src) println(pckl.toString +"\n") println(res) } @Test def testUnpickleString1 { val json = """JSONPickle({ | "tpe": "java.lang.String", | "value": "elem 1" | })""".stripMargin.trim val pckl = JSONPickle(json.toString) val res = pckl.unpickle[String] } @Test def testUnpickleString2 { val src = "elem 1" val pckl = src.pickle val pckl2 = JSONPickle(pckl.toString) val res = pckl2.unpickle[String] println(src) println(pckl.toString +"\n") println(res) } } ``` I don't know how to use unpickle with the Scala Pickle framework.