我尝试了以下单元测试。
首次测试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。
答案 0 :(得分:7)
你应该使用
{
"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
代替JSON
来获取JSONPickle(...)
:
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