当前位置: 首页 > 知识库问答 >
问题:

Json模式验证错误

荆哲
2023-03-14

我在验证JSON时遇到了一些错误。我无法理解这些错误,有人能帮我解释一下吗。

{
"$schema": "http://json-schema.org/draft-04/schema#",
"description": "Modified JSON Schema draft v4 that includes the optional '$ref' and 'format'",
"definitions": {
    "schemaArray": {
        "type": "array",
        "minItems": 1,
        "items": { "$ref": "#" }
    },
    "positiveInteger": {
        "type": "integer",
        "minimum": 0
    },
    "positiveIntegerDefault0": {
        "allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ]
    },
    "simpleTypes": {
        "enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ]
    },
    "stringArray": {
        "type": "array",
        "items": { "type": "string" },
        "minItems": 1,
        "uniqueItems": true
    }
},
"type": "object",
"properties": {
    "id": {
        "type": "string",
        "format": "uri"
    },
    "$schema": {
        "type": "string",
        "format": "uri"
    },
    "$ref": {
        "type": "string"
    },
    "format": {
        "type": "string"
    },
    "title": {
        "type": "string"
    },
    "description": {
        "type": "string"
    },
    "default": { },
    "multipleOf": {
        "type": "number",
        "minimum": 0,
        "exclusiveMinimum": true
    },
    "maximum": {
        "type": "number"
    },
    "exclusiveMaximum": {
        "type": "boolean",
        "default": false
    },
    "minimum": {
        "type": "number"
    },
    "exclusiveMinimum": {
        "type": "boolean",
        "default": false
    },
    "maxLength": { "$ref": "#/definitions/positiveInteger" },
    "minLength": { "$ref": "#/definitions/positiveIntegerDefault0" },
    "pattern": {
        "type": "string",
        "format": "regex"
    },
    "additionalItems": {
        "anyOf": [
            { "type": "boolean" },
            { "$ref": "#" }
        ],
        "default": { }
    },
    "items": {
        "anyOf": [
            { "$ref": "#" },
            { "$ref": "#/definitions/schemaArray" }
        ],
        "default": { }
    },
    "maxItems": { "$ref": "#/definitions/positiveInteger" },
    "minItems": { "$ref": "#/definitions/positiveIntegerDefault0" },
    "uniqueItems": {
        "type": "boolean",
        "default": false
    },
    "maxProperties": { "$ref": "#/definitions/positiveInteger" },
    "minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" },
    "required": { "$ref": "#/definitions/stringArray" },
    "additionalProperties": {
        "anyOf": [
            { "type": "boolean" },
            { "$ref": "#" }
        ],
        "default": { }
    },
    "definitions": {
        "type": "object",
        "additionalProperties": { "$ref": "#" },
        "default": { }
    },
    "properties": {
        "type": "object",
        "additionalProperties": { "$ref": "#" },
        "default": { }
    },
    "patternProperties": {
        "type": "object",
        "additionalProperties": { "$ref": "#" },
        "default": { }
    },
    "dependencies": {
        "type": "object",
        "additionalProperties": {
            "anyOf": [
                { "$ref": "#" },
                { "$ref": "#/definitions/stringArray" }
            ]
        }
    },
    "enum": {
        "type": "array",
        "minItems": 1,
        "uniqueItems": true
    },
    "type": {
        "anyOf": [
            { "$ref": "#/definitions/simpleTypes" },
            {
                "type": "array",
                "items": { "$ref": "#/definitions/simpleTypes" },
                "minItems": 1,
                "uniqueItems": true
            }
        ]
    },
    "allOf": { "$ref": "#/definitions/schemaArray" },
    "anyOf": { "$ref": "#/definitions/schemaArray" },
    "oneOf": { "$ref": "#/definitions/schemaArray" },
    "not": { "$ref": "#" }
},
"dependencies": {
    "exclusiveMaximum": [ "maximum" ],
    "exclusiveMinimum": [ "minimum" ]
},
"default": { }

}

这是json。

{
  "type": "identification.carrier",
  "id": "uui#abb0ef56-8562-4056-aa62-afb758a150ad",
  "happened": "2018-03-28T10:52:44.35+02:00",
  "processed": "2018-03-28T10:52:44.35+02:00",
  "tracking_id": "tid#ad2ebdb1-5d5b-4dcb-a058-494b6af89127",
  "source_attributes": {
    "id": "idsadm@app44A0",
    "data": {
      "info": "resumeIdentify: result: carrier has operator and mobile network",
      "callId": "ad2ebdb1-5d5b-4dcb-a058-494b6af89127",
      "contextId": "0aeb6745-a43c-4257-a535-6905d21a5297",
      "ids_state": "SUCCESS",
      "ids_strategy_type": "REDIRECT_MULTI_WITH_MSISDN_IN_HEADER",
      "ids_identity_type": "MSISDN",
      "country": "DE",
      "ids_result_type": "IDENTITY",
      "ids_result_network": "MobileNetwork[MOBILE=Vodafone D2 GmbH,operator=Operator[ref=10013,MNO=VODAFONE,countryIsoName=DE],countryIsoName=DE,ref=64,mnc=2,mcc=262,mvnos=[Operator[ref=30,MVNO=MOBILCOM-DEBITEL,countryIsoName=DE]]",
      "idsServiceLine": "599 387 240"
    }
  },
  "event_data": {
    "service": {
      "name": "IdsService",
      "version": "4.1"
    },
    "result": {
      "country": "DE",
      "mno": "VODAFONE",
      "mvno": "MOBILCOM-DEBITEL",
      "mcc": "262",
      "mnc": "2"
    }
  }
}

消息:JSON与“anyOf”中的任何模式都不匹配。架构路径:

消息:无效类型。应为数组,但得到的是字符串。架构路径:

消息:值“标识”载体“未在枚举中定义。架构路径:

消息:字符串“uui # abb 0 ef 56-8562-4056-aa62-AFB 758 a 150 ad”未根据格式“uri”进行验证。架构路径:

共有2个答案

赫连靖琪
2023-03-14

使用架构 draft-04 或更高版本验证 JSON 时会发生此错误,问题是“id”应采用 URI 格式,而架构中定义的“类型”是数组,因此,如果要保持模型原样,解决方案可能会重命名 id 和类型。

葛嘉悦
2023-03-14

提供的模式是一个略微修改的元模式,它验证JSON模式结构。

提供的JSON数据看起来更像DTO,而不是模式。因此,您会收到有关错误类型的错误。

JSON模式类型必须是单个值或这样的字符串数组:<code>“array”、“boolean”、“integer”、“null”、“number”、“object”、“string”。

"identification.carrier"不在列表中,这就是为什么会出现验证错误。

最有可能的是,您应该根据特定架构(而不是元架构)验证数据,例如(为简单起见,省略了大多数属性):

{
  "type": "object",
  "properties": {
    "type": {"type":"string"},
    "id": {"type": "string"},
    "happened": {"type":"string", "format":"date-time"}
  },
  "required": ["type", "id"]
}
 类似资料:
  • 我有一个用例,我将把一个json-schema作为输入,验证它,然后保存在我的系统中。稍后,我将获取json数据,我需要使用上面提到的json-schema来验证这些数据。给定这个场景,我需要执行两个级别的验证: 我使用的是json-schema-validator jar,只能找到第二级验证,在文档中找不到json-schema验证。例如:假设我们有以下示例json-schema:

  • 我试图使用另一个JSON模式来验证JSON模式。 要验证的JSON模式示例:https://jsonschema.net/home 验证上述模式的验证模式参考:https://github.com/ajv-validator/ajv/blob/master/lib/refs/json-schema-draft-07.json 从上面的中,如果我删除,我的JSON将变得无效。 我有什么方法可以定义根

  • 问题内容: 有没有一种方法可以针对该结构的JSON模式验证JSON结构?我已经查看并发现JSON.Net验证了,但这并不能满足我的要求。 JSON.net可以: 这证明是正确的。 这也证明是真的 仅此验证为假。 理想情况下,我希望它可以验证那里也没有应该存在的字段。 问题答案: 我认为您只需要添加 到您的架构。这将停止提供未知属性。 因此,现在您的结果将是:-正确,错误,错误 测试代码… 输出:-

  • 这是要根据模式验证的JSON。 问题是,如果我们传递了错误的数据,它将正确地验证eid和ename的类型(即整数或字符串)。对于例如: 如果我们为限定传递了错误的类型,那么它将验证为true(即,它不验证限定的类型,可能是因为它是嵌套的)。

  • 我想通过KafkaRest代理产生一个Kafka主题。我已经在模式注册表中创建了一个JSON模式,我希望所有消息都根据注册的模式进行验证,如果它们与模式不匹配,则拒绝。 我的模式 此架构已正确注册并分配了版本1。然后我尝试为和生成一个数据类型错误的消息,但是消息被接受。 请注意,我正在生成一个与模式关联的

  • 我对根据JSON模式验证JSON文档不感兴趣。我想验证JSON模式本身,检查它是否针对特定草案有效。是否有工具Java可以验证模式本身?