Создайте рекурсивную схему JSON, которая является общей - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь создать схему 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 выше.Любая помощь будет принята с благодарностью.

...