我正在尝试将json提取元素解析为case类。只是好奇,为什么代码以一种方式而不是另一种方式运行。
此代码有效
import org.json4s._
import org.json4s.DefaultFormats
import org.json4s.jackson.JsonMethods.parse
object JsonCase {
def main(args: Array[String]): Unit = {
implicit val formats = DefaultFormats
val input = """{"InputDB: "XYZ"}"""
case class config(stagingDB: String)
val spec = parse(input).extract[config]
println(spec.stagingDB)
}
}
为什么下面的代码不起作用
import org.json4s._
import org.json4s.DefaultFormats
import org.json4s.jackson.JsonMethods.parse
implicit val formats = DefaultFormats
val input = """{"stagingDB": "XYZ"}"""
case class config(stagingDB: String)
val spec = parse(input).extract[config]
println(spec.stagingDB)
答案 0 :(得分:0)
我发现事实恰恰相反。第二段代码有效,但是第一段代码失败,因为在input
中引用错误。 "
没有结束InputDB
,因此它不是有效的JSON。
通常,在比较两个代码块时,应删除尽可能多的共享代码。因此config
,input
和formats
应该在object
之外,并且在两个示例之间共享,这样您就可以知道自己专注于代码的差异而不是相似性。 / p>
答案 1 :(得分:0)
至少需要在对象/类级别定义所有内容(否则没有任何意义)。
下面是我想你想要的
object JsonCase {
// This way it applies to the whole object
implicit val formats = DefaultFormats
def main(args: Array[String]): Unit = {
// do stuff
....