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)

私の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



 }

}
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 に答える