JSON模式 - 支持字段的正则表达式

时间:2018-03-25 12:17:21

标签: json jsonschema

我想使用以下库gojsonschema来验证json结构, Currenlty我对以下示例提出了两个问题

https://github.com/xeipuuv/gojsonschema

  1. #/definitions/....是什么?它的目的是什么?
  2. 该名称应具有以下内容:
  3. {required: true, unique: true, pattern: '/^[A-Za-z0-9_\-\.]+$/'}

    唯一的一点是,如果我在模式中提交了另一个名称,它应该是唯一的,我如何使用jsonschema验证它?

    var schema = `
    {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "type": "object",
        "name": ...
        "properties": {
            "username": {"$ref": "#/definitions/name"},
    

    更新

    我发现的是这个 https://spacetelescope.github.io/understanding-json-schema/reference/regular_expressions.html

    但是我应该如何在我提供的json中查看

    应该是这样吗

    var schema = `
        {
            "$schema": "http://json-schema.org/draft-04/schema#",
            "type": "object",
            "name": {
            "type": "object",
            "pattern":'/^[A-Za-z0-9_\-\.]+$/'
    }
    
            "properties": {
                "username": {"$ref": "#/definitions/name"},
    

2 个答案:

答案 0 :(得分:2)

  1. #/definitions/name是另一个架构的internal reference。该文档的部分应如下所示:

    "definitions": {
        "name": {
             ...
        }
    }
    
  2. JSON架构没有unique验证程序。有一个uniqueItems验证程序可以与数组一起使用,但我不认为这就是您要查找的内容。

答案 1 :(得分:2)

https://datatracker.ietf.org/doc/draft-handrews-json-schema-validation/?include_text=1

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {  
        "username": {  
            "type": "array",
            "items": {
                "type": "string",
                "pattern": "/^[A-Za-z0-9_\-\.]+$/"
            },
            "uniqueItems": true
         }
    },
    "required": [  
         "username"
    ]
}

1:"定义"关键字提供标准化的位置    模式作者将可重用的JSON模式内联到更一般的模式中    架构。该关键字不会直接影响验证结果。

此关键字的值必须是一个对象。每个成员的价值    对象必须是有效的JSON模式。

作为一个例子,这里是一个描述积极数组的模式    整数,其中正整数约束是子模式    "定义":

  {
   "type": "array",
   "items": { "$ref": "#/definitions/positiveInteger" },
   "definitions": {
       "positiveInteger": {
           "type": "integer",
           "exclusiveMinimum": 0
       }
   }
   }

2:uniqueItems

此关键字的值必须是布尔值。

如果此关键字的布尔值为false,则实例将进行验证    成功。如果它的布尔值为true,则实例将进行验证    成功,如果它的所有元素都是唯一的。

省略此关键字的行为与false值相同。

需要

此关键字的值必须是数组。这个数组的元素,    如果有的话,必须是字符串,并且必须是唯一的。

如果对象实例中的每个项目都对该关键字有效    array是实例中属性的名称。

省略此关键字与空数组具有相同的行为。

属性

{
"type": "object",
"properties": {
    "progBinaryName": {
        "type": "string",
        "pattern": "^[A-Za-z0-9 -_]+_Prog\\.(exe|EXE)$"
    }
}
}

"属性的价值"必须是一个对象。这个的每个值    对象必须是有效的JSON模式。

此关键字确定子实例如何验证对象,以及    不直接验证直接实例本身。

如果,对于出现在两者中的每个名称,验证成功    实例以及作为此关键字值的名称,即孩子    该名称的实例成功验证了    相应的架构。

省略此关键字与空对象具有相同的行为。