我尝试了以下单元测试.
首次测试testUnpickleJsonPickleFormat效果很好.它腌制一个字符串并取出泡菜.
testUnpickleString {1,2}测试以反序列化String.但它们根本不起作用.我不知道哪里有什么想念我.
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) } }
我不知道如何在Scala Pickle框架中使用unpickle.
解决方法
你应该用
{ "tpe": "java.lang.String","value": "elem 1" }
没有JSONPickle(…):
val json = """{ "tpe": "java.lang.String","value": "elem 1" }""" JSONPickle(json).unpickle[String] // String = elem 1
JSONPickle({…})不是有效的JSON.
您还应该使用pckl.value而不是pckl.toString来获取没有JSONPickle(…)的JSON:
val src = "elem 1" val pckl = src.pickle val pckl2 = JSONPickle(pckl.value) pckl2.unpickle[String] // String = elem 1
你也可以像这样使用模式匹配:
val src = "elem 2" val pckl = src.pickle val pckl2 = pckl match { case JSONPickle(value) => JSONPickle(value) } pckl2.unpickle[String] // String = elem 2