首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JsonProperty注释不适用于Scala中的Json解析(Jackson/Jerkson)

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

Stack Overflow用户
提问于 2014-04-17 16:58:05
回答 3查看 3.7K关注 0票数 1

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

{“类型”:1}

我使用的case类如下所示:

代码语言:javascript
复制
case class MyJsonObj(
    val type: Int
)

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

代码语言:javascript
复制
case class MyJsonObj(
    @JsonProperty("type") val myType: Int
)

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

代码语言:javascript
复制
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)
}

我得到以下错误:

代码语言:javascript
复制
[error] (run-main-a) com.codahale.jerkson.ParsingException: Invalid JSON. Needed [myType], but found [type].

P.S:如上文所示,我使用的是jerkson/jackson,但如果这样做更容易,则不介意切换到其他json解析库。

EN

回答 3

Stack Overflow用户

发布于 2014-04-17 17:12:43

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

代码语言:javascript
复制
case class MyJsonObj(
    val `type`: Int
)
票数 4
EN

Stack Overflow用户

发布于 2014-04-17 18:35:28

我怀疑您没有在Jackson中正确地启用Scala支持。

我试过这个:

代码语言:javascript
复制
object Test extends App {

  val mapper = new ObjectMapper
  mapper.registerModule(DefaultScalaModule)
  println(mapper.writeValueAsString(MyJsonObj(1)))

  val obj = mapper.readValue("""{"type":1}""", classOf[MyJsonObj])
  println(obj.myType)
}

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

我得到了:

代码语言:javascript
复制
{"type":1}
1

请注意,我通过调用registerModule向对象映射程序添加了Scala支持

票数 3
EN

Stack Overflow用户

发布于 2019-09-06 02:28:24

正如“翼潜水手”所暗示的那样,答案在于Scala元注释

这对我起了作用:

代码语言:javascript
复制
import scala.annotation.meta.field

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

这是对mapper.registerModule(DefaultScalaModule)的补充,如果要反序列化为Scala类,您可能需要它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23139127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档