1

我正在使用与来自lift-json的 scala 2.10 兼容的 json-lift,但我似乎无法访问 extract 方法。像这个例子:

import net.liftweb.json._
object testobject {

case class process(process_id:Int,job_id:Int ,command:String, exception:String)

def main(args: Array[String]) {
val json = parse("""
    { 
        "process_id": "2",
        "job_id": "540",
        "command": "update",
        "exception": "0"
    }
    """)

    json.extract[process] // produces an error


 }

}

现在该类具有动态解析,例如以下不会产生任何错误(甜蜜):

json.process_id // will produce JString(2)

我的两个问题是:

  1. 如何将 json 对象映射到我的案例类
  2. 如何将 JString 转换为常规字符串。

更新:电梯的好人已经为 scala 2.10.0 创建了升级......所以你可以从他们那里下载。无需任何工作。

import net.liftweb.json._
object testobject {

case class process(process_id:Int,job_id:Int ,command:String, exception:String)

def main(args: Array[String]) {
val json = parse("""
    { 
        "process_id": "2",
        "job_id": "540",
        "command": "update",
        "exception": "0"
    }
    """)

    val p = json.extract[process] // maps the json object to the process case class
    println(p.job_id) // will print 540



 }

}
4

2 回答 2

1

我向您展示了获取正确字符串的方法,希望对您有所帮助:

假设一个具有 x 和 y 值的元组列表

val dataSet:List[(Int,Int)] = new List((0,1),(1,3),(2,6))

我制作了我的 JObject ( net.liftweb.json.JsonAST.JObject):

val jsonTmp:JObject = ("x" -> dataSet.map(k => k._1)) ~ ("y" -> dataSet.map(k => k._2)))

然后我得到这样的字符串:

val jsonString:String = compact(render(jsonTmp))

compact(d:Document):String&render(value:JValue):Document来自 json 包。

这是生成的字符串(三引号仅用于代码格式化):

"""  {"x":[0,1,2],"y":[1,3,6]}  """
于 2013-06-03T07:43:43.163 回答
0

我知道了:

val process_id = json.process_id match { case JString(s) => s.toInt }
于 2013-06-03T16:53:16.393 回答