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.

Original source