Scala unpickling from string

I tried the following Unit Test.

The first test testUnpickleJsonPickleFormatworks well. He dries the string and sprinkles the pickle.

testUnpickleString{1,2}checks non-esterization of a string. But they don’t work at all. I don’t know where something is missing 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 do not know how to use unpickle with the Scala Pickle framework.

+4
source share
1 answer

You have to 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({...})not valid JSON.

You should also use pckl.valueinstead pckl.toStringto get JSONwithout JSONPickle(...):

val src = "elem 1"
val pckl = src.pickle
val pckl2 = JSONPickle(pckl.value)
pckl2.unpickle[String]
// String = elem 1

You can also use pattern matching as follows:

val src = "elem 2"
val pckl = src.pickle
val pckl2 = pckl match {
  case JSONPickle(value) => JSONPickle(value)
} 
pckl2.unpickle[String]
// String = elem 2
+7
source

Source: https://habr.com/ru/post/1525036/


All Articles