如何在JSON Schema中标识对动态添加属性的支持
解决JSON Schema中允许未知属性的问题
嘿,作为刚接触JSON Schema的新手,你的需求其实很常见——我们只需要用到additionalProperties这个关键字就能轻松搞定!
先看你原来的Schema,它只定义了必须存在的original_msg属性,但没有处理那些预先未知的额外属性。我们来调整一下:
"tx_properties": { "type": "object", "required": ["original_msg"], "properties": { "original_msg": { "type": "string" } }, "additionalProperties": true }
关键细节解释:
required: ["original_msg"]:确保tx_properties对象里必须包含original_msg这个字符串属性,和你最初的需求完全匹配。additionalProperties: true:这是核心!它允许对象添加任意数量的未知属性,这些属性的值可以是任何JSON类型(字符串、数字、嵌套对象等等),完美适配你给出的示例JSON结构。
如果之后你想给额外属性的值做一些类型限制(比如只允许字符串、数字或对象),也可以把additionalProperties改成一个子Schema,比如:
"additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "number" }, { "type": "object" } ] }
另外,你原来Schema里的anyOf其实是多余的——因为required已经直接指定了必须存在的属性,不需要用anyOf来包裹,删掉它能让Schema更简洁易懂。
用修改后的Schema验证你给出的示例JSON:
"tx_properties": { "original_msg": "foo", "something_else": "bar", "or_something_numeric": 172, "or_even_deeper_things": { "fungible": false } }
完全可以通过验证,既满足了original_msg的必填要求,也允许了各种未知属性的存在。
内容的提问来源于stack exchange,提问作者Frank C.
相关产品推荐
相关产品推荐

