Метод извлечения json-lift недоступен

Я использую json-lift, совместимый со scala 2.10, из lift-json, но мне не кажется чтобы иметь доступ к методу извлечения. как этот пример:

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 с моим классом case
  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



 }

}

person CruncherBigData    schedule 03.06.2013    source источник


Ответы (2)


Я покажу вам свой метод получения правильной строки, надеюсь, вам поможет:

Предположим, список кортежей со значениями 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]}  """
person Luther Blissett    schedule 03.06.2013

Я понял:

val process_id = json.process_id match { case JString(s) => s.toInt }
person Community    schedule 03.06.2013