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

标签 scala apache-spark json4s

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

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

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

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

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

json4s 中是否有等效的构造?

最佳答案

请注意,您可以通过将保留关键字括在反引号中来使用它们:

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)
    }))
}

关于scala - 包含保留关键字的 JSON 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58824327/

相关文章:

apache-spark - 处理pyspark数据帧中的字符串到数组转换

scala - Spark-Shell 和 scala CLI 客户端有什么区别吗?

scala - json4s 删除值为 None 的键

Json4s 在序列化期间忽略 None 字段(而不是使用 'null' )

scala - 如何更改项目的sbt版本

scala - Spark,在 Scala 中添加具有相同值的新列

scala:匹配情况下为 "block cannot contain declarations"

scala - Spark 2逻辑回归删除阈值

json - 使用 Scala 和 json4s 反序列化为 java 对象

scala - 猫 `Eq` 的 `===` 与 Scalatest