【问题标题】:json-lift extract method not accessablejson-lift 提取方法无法访问
【发布时间】:2013-06-03 06:00:17
【问题描述】:

我正在使用与 lift-json 中的 scala 2.10 兼容的 json-lift,但我似乎无法使用提取方法。像这个例子:

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 转换为常规字符串。

更新: lift 的好人已经为 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



 }

}

【问题讨论】:

    标签: json parsing scala lift-json


    【解决方案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]}  """
    

    【讨论】:

      【解决方案2】:

      我明白了:

      val process_id = json.process_id match { case JString(s) => s.toInt }
      

      【讨论】: