繁体   English   中英

用可选参数匹配消息的 Python 模式

[英]Python schema to match messages with optional arguments

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

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. “items”中的每一项都包含一个“id”
  4. 我们不关心项目可能包含的其他元素(如“设置”)

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM