简体   繁体   English

验证自定义 JSON 架构

[英]Validate custom JSON schema

I'm trying to validate a custom JSON schema in Python 3. I'm using this tutorial from JSON Schema and validating it with an online tool, JSON Schema validator , that is one of the tools that they refer to in the Web (Online) section of the Implementation section . I'm trying to validate a custom JSON schema in Python 3. I'm using this tutorial from JSON Schema and validating it with an online tool, JSON Schema validator , that is one of the tools that they refer to in the Web (Online )部分的实施部分

After defining my JSON schema, filling out an example and testing it in the online tool, it says it's fine.在定义我的 JSON 模式后,填写一个示例并在在线工具中对其进行测试,它说没问题。 But the problem is that if I change the names of the nodes (except for the main node), it keeps saying that it's OK.但问题是,如果我更改节点的名称(主节点除外),它一直说没关系。 That's what I don't understand.这就是我不明白的。

I had defined the scheme like this (and it is wrong).我已经定义了这样的方案(这是错误的)。 I apologise if it is difficult to understand because I had to anonymise the data:如果由于我不得不匿名数据而难以理解,我深表歉意:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://my-program/schema.json",
  "title": "A title",
  "description": "A description",
  "type": "object",
  "properties": {
    "root": {
      "description": "A description",
      "type": "array",
      "items": {
        "type": "object"
      },
      "minItems": 1,
      "uniqueItems": false,
      "properties": {
        "a": {
          "description": "A description",
          "type": "string"
        },
        "b": {
          "description": "A description",
          "type": "string"
        },
        "c": {
          "description": "A description",
          "type": "string"
        },
        "d": {
          "description": "A description",
          "type": "object",
          "properties": {
            "d_a": {
              "description": "A description",
              "type": "object"
            },
            "d_b": {
              "description": "A description",
              "type": "object"
            },
            "d_c": {
              "description": "A description",
              "type": "object",
              "properties": {
                "d_c_a": {
                  "description": "A description",
                  "type": "object",
                  "properties": {
                    "d_c_a_a": {
                      "description": "A description",
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "minItems": 0,
                      "uniqueItems": false
                    }
                  },
                  "required": [
                    "d_c_a_a"
                  ]
                },
                "d_c_b": {
                  "description": "A description",
                  "type": "object",
                  "properties": {
                    "d_c_b_a": {
                      "description": "A description",
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "minItems": 0,
                      "uniqueItems": false
                    }
                  },
                  "required": [
                    "d_c_b_a"
                  ]
                },
                "d_c_c": {
                  "description": "A description",
                  "type": "object",
                  "properties": {
                    "d_c_c_a": {
                      "description": "A description",
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "minItems": 0,
                      "uniqueItems": false
                    },
                    "d_c_c_b": {
                      "description": "A description",
                      "type": "string"
                    }
                  },
                  "required": [
                    "d_c_c_a",
                    "d_c_c_b"
                  ]
                }
              },
              "required": [
                "d_c_a",
                "d_c_b",
                "d_c_c"
              ]
            }
          },
          "required": [
            "d_a",
            "d_b",
            "d_c"
          ]
        },
        "e": {
          "description": "A description",
          "type": "array",
          "items": {
            "type": "object"
          },
          "minItems": 1,
          "uniqueItems": true,
          "properties": {
            "e_a": {
              "description": "A description",
              "type": "string"
            },
            "e_b": {
              "description": "A description",
              "type": "string"
            },
            "e_c": {
              "description": "A description",
              "type": "string"
            },
            "e_d": {
              "description": "A description",
              "type": "string"
            },
            "e_e": {
              "description": "A description",
              "type": "string"
            },
            "e_f": {
              "description": "A description",
              "type": "string"
            }
          },
          "required": [
            "e_a",
            "e_b",
            "e_c",
            "e_d",
            "e_e",
            "e_f"
          ]
        },
        "f": {
          "description": "A description",
          "type": "integer"
        },
        "g": {
          "description": "A description",
          "type": "boolean"
        },
        "h": {
          "description": "A description",
          "type": "object",
          "properties": {
            "h_a": {
              "description": "A description",
              "type": "array",
              "items": {
                "type": "string"
              },
              "minItems": 0,
              "uniqueItems": true
            },
            "h_b": {
              "description": "A description",
              "type": "array",
              "items": {
                "type": "string"
              },
              "minItems": 0,
              "uniqueItems": true
            },
            "h_c": {
              "description": "A description",
              "type": "array",
              "items": {
                "type": "string"
              },
              "minItems": 0,
              "uniqueItems": true
            }
          },
          "required": [
            "h_a",
            "h_b",
            "h_c"
          ]
        }
      },
      "required": [
        "a",
        "b",
        "c",
        "d",
        "e",
        "f",
        "g",
        "h"
      ]
    }
  },
  "required": [
    "root"
  ]
}

And the JSON that I'm trying to validate looks like:我试图验证的 JSON 看起来像:

{
  "root": [
    {
      "a": "Bla bla",
      "b": "Bla bla",
      "c": "Bla bla",
      "d": {
        "d_a": {
          "something random": 0,
          "something random": 4
        },
        "d_b": {
          "something random": "Bla bla",
          "something random": 0
        },
        "d_c": {
          "d_c_a": {
            "d_c_a_a": [
              "something random"
            ]
          },
          "d_c_b": {
            "d_c_b_a": [
              "something random",
              "something random",
              "something random"
            ]
          },
          "d_c_c": {
            "d_c_c_a": [
              "something random"
            ],
            "d_c_c_b": "something random"
          }
        }
      },
      "e": [
        {
          "e_a": "something random",
          "e_b": "something random",
          "e_c": "something random",
          "e_d": "something random",
          "e_e": "something random",
          "e_f": "something random"
        },
        {
          "e_a": "something random",
          "e_b": "something random",
          "e_c": "something random",
          "e_d": "something random",
          "e_e": "something random",
          "e_f": "something random"
        }
      ],
      "f": 0,
      "g": true,
      "h": {
        "h_a": [
          "something random"
        ],
        "h_b": [
          "something random"
        ],
        "h_c": [
          "something random"
        ]
      }
    },
    {
      "a": "Bla bla",
      "b": "Bla bla",
      "c": "Bla bla",
      "d": {
        "d_a": {
          "something random": 0,
          "something random": 4
        },
        "d_b": {
          "something random": "Bla bla",
          "something random": 0
        },
        "d_c": {
          "d_c_a": {
            "d_c_a_a": [
              "something random"
            ]
          },
          "d_c_b": {
            "d_c_b_a": [
              "something random",
              "something random",
              "something random"
            ]
          },
          "d_c_c": {
            "d_c_c_a": [
              "something random"
            ],
            "d_c_c_b": "something random"
          }
        }
      },
      "e": [
        {
          "e_a": "something random",
          "e_b": "something random",
          "e_c": "something random",
          "e_d": "something random",
          "e_e": "something random",
          "e_f": "something random"
        },
        {
          "e_a": "something random",
          "e_b": "something random",
          "e_c": "something random",
          "e_d": "something random",
          "e_e": "something random",
          "e_f": "something random"
        }
      ],
      "f": 0,
      "g": true,
      "h": {
        "h_a": [
          "something random"
        ],
        "h_b": [
          "something random"
        ],
        "h_c": [
          "something random"
        ]
      }
    }
  ]
}

If I change root for nono tha validator throws an error, or if I remove root .如果我为nono更改root验证器会引发错误,或者如果我删除root But for the rest of the elements it always says that it's OK.但是对于元素的 rest,它总是说没关系。 Even if I change the names or delete them.即使我更改名称或删除它们。

What I'm doing wrong?我做错了什么?

Regards.问候。

Ok, the problem was with the nesting of the properties field not being doing inside the field items .好的,问题在于properties字段的嵌套没有在字段items内进行。

Here is the fixed template:这是固定模板:

{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://example.com/product.schema.json",
    "title": "A title",
    "description": "A description",
    "type": "object",
    "properties": {
        "root": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "a": {
                        "description": "A description",
                        "type": "string"
                    },
                    "b": {
                        "description": "A description",
                        "type": "string"
                    },
                    "c": {
                        "description": "A description",
                        "type": "string"
                    },
                    "d": {
                        "description": "A description",
                        "type": "object",
                        "properties": {
                            "d_a": {
                                "description": "A description",
                                "type": "object"
                            },
                            "d_b": {
                                "description": "A description",
                                "type": "object"
                            },
                            "d_c": {
                                "description": "A description",
                                "type": "object",
                                "properties": {
                                    "d_c_a": {
                                        "description": "A description",
                                        "type": "object",
                                        "properties": {
                                            "d_c_a_a": {
                                                "description": "A description",
                                                "type": "array",
                                                "items": {
                                                    "type": "string"
                                                },
                                                "minItems": 0,
                                                "uniqueItems": true
                                            }
                                        },
                                        "required": ["d_c_a_a"]
                                    },
                                    "d_c_b": {
                                        "description": "A description",
                                        "type": "object",
                                        "properties": {
                                            "d_c_b_a": {
                                                "description": "A description",
                                                "type": "array",
                                                "items": {
                                                    "type": "string"
                                                },
                                                "minItems": 0,
                                                "uniqueItems": true
                                            },
                                        },
                                        "required": ["d_c_b_a"]
                                    },
                                    "d_c_c": {
                                        "description": "A description",
                                        "type": "object",
                                        "properties": {
                                            "d_c_c_a": {
                                                "description": "A description",
                                                "type": "array",
                                                "items": {
                                                    "type": "string"
                                                },
                                                "minItems": 0,
                                                "uniqueItems": true
                                            },
                                            "d_c_c_b": {
                                                "description": "A description",
                                                "type": "string"
                                            }
                                        },
                                        "required": ["d_c_c_a", "d_c_c_b"]
                                    }
                                },
                                "required": ["d_c_a", "d_c_b", "d_c_c"]
                            },
                        },
                        "required": ["d_a", "d_b", "d_c"]
                    },
                    "e": {
                        "description": "A description",
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "e_a": {
                                    "description": "A description",
                                    "type": "string"
                                },
                                "e_b": {
                                    "description": "A description",
                                    "type": "string"
                                },
                                "e_c": {
                                    "description": "A description",
                                    "type": "string"
                                },
                                "e_d": {
                                    "description": "A description",
                                    "type": "string"
                                },
                                "e_e": {
                                    "description": "A description",
                                    "type": "string"
                                },
                                "e_f": {
                                    "description": "A description",
                                    "type": "string"
                                }
                            },
                            "required": ["e_a", "e_b", "e_c", "e_d", "e_e", "e_f"]
                        },
                        "minItems": 1,
                        "uniqueItems": true,
                    },
                    "f": {
                        "description": "A description",
                        "type": "integer"
                    },
                    "g": {
                        "description": "A description",
                        "type": "boolean"
                    },
                    "h": {
                        "description": "A description",
                        "type": "object",
                        "properties": {
                            "h_a": {
                                "description": "A description",
                                "type": "array",
                                "items": {
                                    "type": "string"
                                },
                                "minItems": 0,
                                "uniqueItems": true
                            },
                            "h_b": {
                                "description": "A description",
                                "type": "array",
                                "items": {
                                    "type": "string"
                                },
                                "minItems": 0,
                                "uniqueItems": true
                            },
                            "h_c": {
                                "description": "A description",
                                "type": "array",
                                "items": {
                                    "type": "string"
                                },
                                "minItems": 0,
                                "uniqueItems": true
                            }
                        },
                        "required": ["h_a", "h_b", "h_c"]
                    }
                },
                "required": ["a", "b", "c", "d", "e", "f", "g", "h"]
            },
            "minItems": 1,
            "uniqueItems": true,
        },
    },
    "required": ["root"]
}

And here a working example:这是一个工作示例:

{
  "root": [
    {
      "a": "Bla bla",
      "b": "Bla bla",
      "c": "Bla bla",
      "d": {
        "d_a": {
          "something random": 0,
          "something random": 4
        },
        "d_b": {
          "something random": "Bla bla",
          "something random": 0
        },
        "d_c": {
          "d_c_a": {
            "d_c_a_a": [
              "something random"
            ]
          },
          "d_c_b": {
            "d_c_b_a": [
              "something random_1",
              "something random_2",
              "something random_3"
            ]
          },
          "d_c_c": {
            "d_c_c_a": [
              "something random"
            ],
            "d_c_c_b": "something random"
          }
        }
      },
      "e": [
        {
          "e_a": "something random_1",
          "e_b": "something random_2",
          "e_c": "something random_3",
          "e_d": "something random_4",
          "e_e": "something random_5",
          "e_f": "something random_6"
        },
        {
          "e_a": "something random_7",
          "e_b": "something random_8",
          "e_c": "something random_9",
          "e_d": "something random_10",
          "e_e": "something random_11",
          "e_f": "something random_12"
        }
      ],
      "f": 0,
      "g": true,
      "h": {
        "h_a": [
          "something random_1"
        ],
        "h_b": [
          "something random_2"
        ],
        "h_c": [
          "something random_3"
        ]
      }
    },
    {
      "a": "Bla bla",
      "b": "Bla bla",
      "c": "Bla bla",
      "d": {
        "d_a": {
          "something random": 0,
          "something random": 4
        },
        "d_b": {
          "something random": "Bla bla",
          "something random": 0
        },
        "d_c": {
          "d_c_a": {
            "d_c_a_a": [
              "something random"
            ]
          },
          "d_c_b": {
            "d_c_b_a": [
              "something random_1",
              "something random_2",
              "something random_3"
            ]
          },
          "d_c_c": {
            "d_c_c_a": [
              "something random"
            ],
            "d_c_c_b": "something random"
          }
        }
      },
      "e": [
        {
          "e_a": "something random_1",
          "e_b": "something random_2",
          "e_c": "something random_3",
          "e_d": "something random_4",
          "e_e": "something random_5",
          "e_f": "something random_6"
        },
        {
          "e_a": "something random_7",
          "e_b": "something random_8",
          "e_c": "something random_9",
          "e_d": "something random_10",
          "e_e": "something random_11",
          "e_f": "something random_12"
        }
      ],
      "f": 0,
      "g": true,
      "h": {
        "h_a": [
          "something random"
        ],
        "h_b": [
          "something random"
        ],
        "h_c": [
          "something random"
        ]
      }
    }
  ]
}

Regards!问候!

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

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