创建一个通用的递归json模式

时间:2019-05-13 18:54:52

标签: json jsonschema json-schema-validator

我正在尝试为json文件创建json模式。 json的结构是通用的,我正在尝试为json文件创建一个通用模式,该模式包含与以下所示类似的结构。

**Json file:**
{
    "Soccer League": {
        "lvl": "Championships",
        "state": "1",
        "Clubs": {
            "Rosely": {
                "Boys": {"id": "A1", "state": "Ready"},
                "Girls": {
                    "id": "A2",
                    "state": "Ready",
                    "Substitutes": {
                        "id": "A3",
                        "state": "Sitting",
                        "Goalkeepers": {
                            "Players": {"id": "A4", "state": "Idle"},
                            "id": "A5",
                            "state": "Idle",
                        },
                    },
                },
            },
            "Division League": {
                "TeamA": {
                    "PlayersA": {
                        "id": "A6",
                        "status": "Ready",
                        "CoachA": {"id": "A7", "state": "Ready"},
                    },
                    "PlayersB": {
                        "id": "A8",
                        "state": "Playing",
                        "CoachB": {"id": "A9", "state": "Idle"},
                    },
                }
            },
        },
    }
}
**Json-schema:**
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "Soccer League": {
      "type": "object",
      "properties": {
        "lvl": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "Clubs": {
          "type": "object",
          "properties": {
            "Rosely": {
              "type": "object",
              "properties": {
                "Boys": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "state": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "id",
                    "state"
                  ]
                },
                "Girls": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "state": {
                      "type": "string"
                    },
                    "Substitutes": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "state": {
                          "type": "string"
                        },
                        "Goalkeepers": {
                          "type": "object",
                          "properties": {
                            "Players": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "state": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "id",
                                "state"
                              ]
                            },
                            "id": {
                              "type": "string"
                            },
                            "state": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "Players",
                            "id",
                            "state"
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "state",
                        "Goalkeepers"
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "state",
                    "Substitutes"
                  ]
                }
              },
              "required": [
                "Boys",
                "Girls"
              ]
            },
            "Division League": {
              "type": "object",
              "properties": {
                "TeamA": {
                  "type": "object",
                  "properties": {
                    "PlayersA": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        },
                        "CoachA": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "status": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "id",
                            "status"
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "status",
                        "CoachA"
                      ]
                    },
                    "PlayersB": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        },
                        "CoachB": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "status": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "id",
                            "status"
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "status",
                        "CoachB"
                      ]
                    }
                  },
                  "required": [
                    "PlayersA",
                    "PlayersB"
                  ]
                }
              },
              "required": [
                "TeamA"
              ]
            }
          },
          "required": [
            "Rosely",
            "Division League"
          ]
        }
      },
      "required": [
        "lvl",
        "state",
        "Clubs"
      ]
    }
  },
  "required": [
    "Soccer League"
  ]
}

从上面可以看到,我们有许多相同的层,但是名称不同。我不确定如何为将遵循类似格式的json文件创建递归json模式。这是一种硬编码,但是如何使其通用。

我是json模式的新手,如果有人可以帮助我从上面的json推断模式,我将不胜感激。任何帮助将不胜感激。

0 个答案:

没有答案