播放ScalaJSON读取[T]解析

播放ScalaJSON读取[T]解析,json,scala,playframework,Json,Scala,Playframework,我正在为rest webservice响应编写Json解析,我有一个Json文件,如下所示: {"program": { "name": "myname", "@id": "12345", "$": "text text text" }, etc. etc. 我为Reads对象编写了一个case类: case class program(name:String) impli

我正在为rest webservice响应编写Json解析,我有一个Json文件,如下所示:

{"program": {
                "name": "myname",
                "@id": "12345",
                "$": "text text text"
            }, etc. etc.
我为Reads对象编写了一个case类:

case class program(name:String)

implicit val programFormat = Json.format[program]
下面是获取数据的伪代码:

val x=(jobj \ "program").validate[program]

x match {
    case JsSuccess(pr, _) => println("JsSuccess:"+pr)
        for(p<- pr.program)
        {
            println(p.name)
        }
    case error: JsError => ....
}
valx=(jobj\“程序”)。验证[程序]
x匹配{
案例JsSuccess(pr,)=>println(“JsSuccess:+pr”)
对于(p…)。。。。
}
对于字段名没有问题,代码运行良好,但我不理解如何捕获字段“@id”和字段“$”,因为我无法在名为:@id或$的case类中创建参数


谢谢您的帮助。

我认为更正确的解决方案是创建自己的
读物,即:

case class Program(name: String, id: String, dollar: String)
implicit val programWrites: Reads[Program] = (
      (__ \ "name").read[String] ~
      (__ \ "@id").read[String] ~
      (__ \ "$").read[String]
)(Program.apply _)
文件:

另一个解决方案,我认为更糟糕的是,使用反勾号

case class Program(name: String, `@id`: String, `$`: String)
implicit val programFormat = Json.format[Program]
它允许在方法名、字段名等中写入特殊符号。
更多信息:

我认为更正确的解决方案是创建自己的
读物,即:

case class Program(name: String, id: String, dollar: String)
implicit val programWrites: Reads[Program] = (
      (__ \ "name").read[String] ~
      (__ \ "@id").read[String] ~
      (__ \ "$").read[String]
)(Program.apply _)
文件:

另一个解决方案,我认为更糟糕的是,使用反勾号

case class Program(name: String, `@id`: String, `$`: String)
implicit val programFormat = Json.format[Program]
它允许在方法名、字段名等中写入特殊符号。 更多信息: