包含保留关键字的JSON反序列化

问题描述 投票:2回答:1

我有一个如下所示的JSON字符串,

{ "name": "foo", "type": "mytype1" }

这是复杂JSON的一部分,我无法控制JSON。我正在尝试将其提取到case类中,这是不可能的,因为“ type”是保留关键字。

在C#中,我将执行以下操作,

[JsonProperty(Name = "blah")]
public string SomethingElse { get; set; }

在json4s中是否有该构造的等价物?

scala apache-spark json4s
1个回答
1
投票

请注意,您可以将保留的关键字放在反引号中来使用:

case class Foo(name: String, `type`: String)

val x: Foo = ???
println(x.`type`)

访问type成员有点麻烦,因此,如果您喜欢这样的话:

case class Foo(name: String, typ: String)

您可以像这样定义自定义序列化器:

object Foo {
  val jsonSerializer = new CustomSerializer[Foo](format => ({
      case JObject(JField("name", JString(name)) :: JField("type", JString(typ)) :: Nil) => Foo(name = name, typ = typ)
    },
    {
      case foo: Foo => JObject(JField("name", JString(foo.name)) :: JField("type", JString(foo.typ)) :: Nil)
    }))
}
© www.soinside.com 2019 - 2024. All rights reserved.