JsonProperty注释不适用于Scala中的Json解析(Jackson/Jerkson)

gja*_*ain 1 json scala jackson jerkson

我需要解析以下 json 字符串:

{“类型”:1}

我正在使用的案例类如下所示:

case class MyJsonObj(
    val type: Int
)
Run Code Online (Sandbox Code Playgroud)

然而,这让 Scala 感到困惑,因为“type”是一个关键字。因此,我尝试使用 Jacson/Jerkson 的 @JsonProperty 注释,如下所示:

case class MyJsonObj(
    @JsonProperty("type") val myType: Int
)
Run Code Online (Sandbox Code Playgroud)

但是,Json 解析器仍然拒绝在 json 中查找“type”字符串,而不是“myType”。以下示例代码说明了该问题:

import com.codahale.jerkson.Json._
import org.codehaus.jackson.annotate._

case class MyJsonObj(
    @JsonProperty("type") val myType: Int
)

object SimpleExample {
  def main(args: Array[String]) {
    val jsonLine = """{"type":1}"""
    val JsonObj = parse[MyJsonObj](jsonLine)
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[error] (run-main-a) com.codahale.jerkson.ParsingException: Invalid JSON. Needed [myType], but found [type].
Run Code Online (Sandbox Code Playgroud)

PS:如上所示,我正在使用 jerkson/jackson,但如果这能让生活更轻松的话,我不介意切换到其他 json 解析库。

win*_*ner 5

使用反引号来防止 Scala 编译器将 type 解释为关键字:

case class MyJsonObj(
    val `type`: Int
)
Run Code Online (Sandbox Code Playgroud)