【问题标题】:Json4s (Native/Jackson) Ignore all unknown fieldsJson4s (Native/Jackson) 忽略所有未知字段
【发布时间】:2015-08-05 23:23:56
【问题描述】:

当使用 Json4s 时,很明显您可以显式忽略特定字段。但是,我没有看到任何关于如何忽略所有未知字段的文档。

在杰克逊,我会使用以下注释:

import com.fasterxml.jackson.annotation._

@JsonIgnoreProperties(ignoreUnknown=true)
case class MyClass(string: String)

我如何使用 Jackson 或 Native 版本的 Json4s 做到这一点?

【问题讨论】:

    标签: json scala jackson json4s


    【解决方案1】:

    我不太确定,如果我把你带到这里,但 Json4s(至少是 org.json4s 版本)默认会忽略其他字段。

    import org.json4s.DefaultFormats
    import org.json4s.native.JsonMethods._
    
    implicit val formats = DefaultFormats
    case class Mailserver(url: String, username: String, password: String)
    
    val json = parse(
    """
      {
        "url": "imap.yahoo.com",
        "username": "myusername",
        "password": "mypassword",
        "additional": "field"
      }
    """
    )
    
    val m = json.extract[Mailserver]
    println(m.url)
    println(m.username)
    println(m.password)
    

    这很好用。

    【讨论】:

    • 只是好奇您使用的是哪个版本的 Scala?以及哪个版本的 Json4s?我注意到它仍然给我带来了一些麻烦。虽然我想彻底测试一下。
    • 对于测试,我使用的是 json4s 3.2.11 版本和 Scala 2.11.x。你有什么烦恼?
    • 我在 Scala 2.10.x 上使用了相同的版本。我正在访问一个定期更改结构/添加字段的私有 API,尽管我注意到它仍然失败,因为会出现一些字段。这些字段不是类型安全的,所以我尽量避免完全解析它们。
    • 那么您是否遇到了一些例外情况?他们是否也删除/重命名字段?还是只是添加新的?
    • 是的,我面前没有日志(抱歉),但它类似于no handler found for field 'x'。有时名为 status 的字段将是 200 的 Int,而有时它是 Boolean。此外,每隔一段时间就会弹出未知名称的字段,因此像杰克逊注释中那样明确的“全部忽略”设置会很有帮助。
    猜你喜欢
    • 2015-05-31
    • 1970-01-01
    • 2021-12-11
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    相关资源
    最近更新 更多