【问题标题】:how json schema validate mixed property?json 模式如何验证混合属性?
【发布时间】:2013-07-02 02:32:41
【问题描述】:
{ 'a': 343, 'b': 434 }

如果我有一个像上面这样的 json 数据,并且属性 'a' 和 'b' 实际上是用户给出的名称,那么它可以是任何字符串。如何创建 json 模式来验证这一点?

【问题讨论】:

  • 我不确定你能不能,但你可以翻译一些可以的东西,比如[{"key": "a", "value" 343}, {"key": "b", "value": 434}]

标签: json validation jsonschema


【解决方案1】:

如果您使用的验证库基于relatively recent version of the JSON Schema,您应该能够使用patternProperties 来验证具有用户定义键的属性。

这是一个使用 javascript 库 tv4 执行验证的快速示例:

var schema = {
    "patternProperties": {
        "^[a-zA-Z0-9]+$": {
            "title": "someUserDefinedPropertyName",
            "type": "number"
        }
    }
};

var valid = { "a": 1234, "b": 5678 };
var invalid = { "a": "1234", "b": 5678 };

alert("Validates? [should be true]: " + tv4.validate(valid, schema));
alert("Validates? [should be false]: " + tv4.validate(invalid, schema));
alert('Variable invalid, error at data path: ' + tv4.error.dataPath + '\n\nError Description:\n' + tv4.error.message);

有关更多信息,我建议阅读上面链接的架构部分,以及查看advanced examples on json-schema.org

【讨论】:

  • 如果真的可以是any属性名,那么“additionalProperties”更适用。您可能应该在回答中提及这一点。 :)
猜你喜欢
  • 1970-01-01
  • 2018-10-29
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
相关资源
最近更新 更多