gpt4 book ai didi

json - Scala Parse 递归 JSON

转载 作者:行者123 更新时间:2023-12-04 04:38:27 28 4
gpt4 key购买 nike

我正在尝试在 Scala 中解析 JSON,但不是很成功。
这是我的 JSON 结构:

{ 
"data" : "test",
"field" : "test",
"listObj" : [{
"data" : "testInner1",
"field" : "testInner1"
} , {
"data" : "testInner2",
"field" : "testInner2"
}],
"obj" : {
"data" : "testInner1",
"field" : "testInner1"
}
}

我正在使用lift来解析。这是我的代码:
import net.liftweb.json._

implicit val formats = DefaultFormats
case class MyJson(data: String, field: String, obj: MyJson, listObj: List[MyJson])
val json = parse("""
{
"data" : "test",
"field" : "test",
"listObj" : [{
"data" : "testInner1",
"field" : "testInner1"
} , {
"data" : "testInner2",
"field" : "testInner2"
}],
"obj" : {
"data" : "testInner1",
"field" : "testInner1"
}
}""")
println(json.extract[Query])

我有以下异常(exception):
Caused by: net.liftweb.json.MappingException: No usable value for operation
Did not find value which can be converted into java.lang.String
at net.liftweb.json.Meta$.fail(Meta.scala:191)
at net.liftweb.json.Extraction$.mkValue$1(Extraction.scala:357)
at net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$build$1(Extraction.scala:317)
at net.liftweb.json.Extraction$$anonfun$13.apply(Extraction.scala:253)
at net.liftweb.json.Extraction$$anonfun$13.apply(Extraction.scala:253)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.immutable.List.foreach(List.scala:318)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at net.liftweb.json.Extraction$.instantiate$1(Extraction.scala:253)
at net.liftweb.json.Extraction$.newInstance$1(Extraction.scala:286)
at net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$build$1(Extraction.scala:315)
at net.liftweb.json.Extraction$.mkValue$1(Extraction.scala:351)
... 34 more
Caused by: net.liftweb.json.MappingException: Did not find value which can be converted into java.lang.String
at net.liftweb.json.Meta$.fail(Meta.scala:191)
at net.liftweb.json.Extraction$.convert(Extraction.scala:403)
at net.liftweb.json.Extraction$.net$liftweb$json$Extraction$$build$1(Extraction.scala:314)
at net.liftweb.json.Extraction$.mkValue$1(Extraction.scala:351)
... 46 more

我试过使用 json4s,但我可以设法将其解析为 case 类。当我从我的 JSON 中删除 obj 和 objList 时,它运行良好。

任何人都可以指出一些方法来解析这种结构以在 Scala 中读取它吗?

最佳答案

更改您的案例类定义,以便 obj是一个可选值:

 case class MyJson(data: String, 
field: String,
// obj: MyJson, // from
obj: Option[MyJson], // to
listObj: List[MyJson])

这是必需的,以便 json 提取器仍然可以生成 MyJson 的实例即使 json 缺少 "obj"字段(它在您的示例中的嵌套结构中执行)。
listObj 不需要这因为没有 "listObj" json 中的字段仍然可以表示为 List[MyJson] 的空列表.

关于json - Scala Parse 递归 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19309653/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com