代码之家  ›  专栏  ›  技术社区  ›  Freid001

根据一组灵活的规则验证JSON对象?

  •  0
  • Freid001  · 技术社区  · 7 年前

    我正在使用 metosin/scjsv 验证POST请求的json主体。

    我想根据以下规则进行验证:

    • 只要映射对象中的元素键符合此正则表达式,就应该允许其具有任何值: ^[a-z_][a-z\\d_]*$
    • 仅对象: {:attribute : {:type "string"}} 应允许作为映射对象内元素的值。

    这是一个有效json对象的示例:

    {
       "mapping" : {
                  "attr_a" : {
                              "attribute" : "a"
                             },
                  "attr_b" : {
                              "attribute" : "b"
                             }
                 }
     }
    

    这是我到目前为止定义的模式,它无法按我希望的方式生效:

    (def schema {:type       "object"
             :properties {:mapping {:type    "object"
                                    :pattern "^[a-z_][a-z\\d_]*$"
                                    {:$attr {:type       "object"
                                             :properties {:attribute {:type "string"}}
                                             :required   [:attribute]}}}}})
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Freid001    7 年前

    我应该用 patternProperties additionalProperties .

    (def schema {:type       "object"
         :properties {:mapping {:type    "object"
                                :patternProperties {"^[a-z_][a-z\\d_]*$" {:type       "object"
                                         :properties {:attribute {:type "string"}}
                                         :required   [:attribute]}}}}})