代码之家  ›  专栏  ›  技术社区  ›  Akash Sethi

如何对json值应用自定义验证

  •  0
  • Akash Sethi  · 技术社区  · 7 年前

    我有一个json数据来自api。我有一组策略需要验证即将到来的json数据。

    例如,我有一个类似json的

    {
    "users_id":"x",
    "is_user_logged_in":"true",
    "checkin_date":"2018-12-12",
    "checkout_date":"2019-12-13"
    }
    

    现在我想像 checkin_date 应该小于 checkout_data 或者假设 is-user_logged_in 那么是真的 user_id 不应为空。

    我无法反序列化json,因为我需要将其传递给不同的应用程序来使用

    我正在使用scala,知道如何实现它。关键是我需要验证多个策略或规则,并且只能在运行时获取这些规则。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Andriy Plokhotnyuk    7 年前

    最简单的方法是将验证添加到默认构造函数中,并将json解析器用作验证程序(不需要使用解析的数据):

    import java.time.LocalDate
    
    case class UserData(
      user_id: Option[String],
      is_user_logged_in: Boolean,
      checkin_date: LocalDate,
      checkout_date: LocalDate
    ) {
      require(!is_user_logged_in || user_id.isDefined, "missing `user_id` for logged in user")
      require(checkout_date.isAfter(checkin_date), "`checkout_date` should be after `checkin_date`")
    }
    

    对于更复杂的情况,请考虑使用一些方便的验证库,例如:

    https://github.com/jto/validation