Python模式以匹配带有可选参数的消息

时间:2019-02-15 15:35:44

标签: python json jsonschema

我正在尝试使用python的schemajson schema来验证带有嵌套字典和列表的字典:

message = 
    {"pagination":
    {"page":1,"perPage":25},
    "items":[{"id":1, "settings":[{"name":"name1","value":true}]},
             {"id":2 ,"settings":[{"name":"name2","value":true}}]}
    }

我需要进行以下验证:

  1. 消息中显示“分页”
  2. “ items”在邮件中,并且至少包含一个成员
  3. “项目”中的每个项目都包含一个“ id”
  4. 我们不在乎项目可能包含的其他元素(例如“设置”)

如何使模式表现得更像正则表达式?(例如:我不知道下一条消息的项目可能在“ id”上包含哪些其他元素,但是满足前三个条件-我希望它得到验证)。

例如,以下消息也必须被模式识别:

message = 
{"pagination":
{"page":1,"perPage":25},
"items":[{"id":1, "type": "A"},
         {"id":2 ,"type": "B"}]}
}

1 个答案:

答案 0 :(得分:0)

这听起来像是JSON Schema的完美用例。 JSON模式验证是减法的。所有JSON文档均针对空模式({})有效。然后,模式中的每个关键字都将所有JSON文档的集合限制为更有用的东西。因此,您可以声明一个对象必须具有“ id”属性,而不必明确声明允许任何其他属性,因为这只是JSON Schema的正常操作模式。

我几乎为您编写了一个非常简单的模式作为示例,但是随后决定最好将您指向“ Understanding JSON Schema”,这样您就可以自己学习而不是由我来提供解决方案。但是,请阅读该教程后再问一个(更具体的)问题。