gpt4 book ai didi

json - 关于自定义json schema的一些问题

转载 作者:行者123 更新时间:2023-12-04 17:26:30 26 4
gpt4 key购买 nike

我是 json 的菜鸟。在定义我的 RESTful API 结果的格式(即 JSON)时,我觉得将它记录为我自己的会更容易 JSON schema .在写一篇文章时,我有几个问题:

  • 在我的结果 JSON 中,如何指定它确认的架构的 URI?
    --edit-- 是否使用 $schema属性?
  • JSON 模式版本控制是否有任何约定/指南?我应该/可以在我的模式中定义一些属性作为属性吗?我看到JSON schema itself除了在其 URI 中指定为键值 $schema 之外,没有定义版本.
  • 我可以将一个 BIG JSON 模式分解为多个较小的模式并将一个包含在另一个中吗?就像 C++ 中的 #include,然后在我作为结果发送给用户的 JSON 中引用多个模式。
  • 我可以为键“类型”定义自定义值吗?例如。我想像这样重用“日期”的定义:

  • [忽略这一行,它是为了让格式适用于以下 json..]
    {
    "date":{
    "type":"object",
    "properties":{
    "month":{
    "type":"integer",
    "minimum":1,
    "maximum":12
    },
    "year":{
    "type":"integer",
    "minimum":0
    }
    }
    },
    "personInfo":{
    "type":"object",
    "properties":{
    "name":{
    "type":"string"
    },
    "dateOfBirth":{
    "type":"date"
    }
    }
    },
    "student":{
    "type":"object",
    "properties":{
    "id":{
    "type":"personInfo"
    },
    "pass_out_year":{
    "type":"date"
    }
    }
    }
    }
    而不是在这样的多个地方提供“日期”的属性:
    {
    "personInfo":{
    "type":"object",
    "properties":{
    "name":{
    "type":"string"
    },
    "dateOfBirth":{
    "type":"object",
    "properties":{
    "month":{
    "type":"integer",
    "minimum":1,
    "maximum":12
    },
    "year":{
    "type":"integer",
    "minimum":0
    }
    }
    }
    }
    },
    "student":{
    "type":"object",
    "properties":{
    "id":{
    "type":"personInfo"
    },
    "pass_out_year":{
    "type":"object",
    "properties":{
    "month":{
    "type":"integer",
    "minimum":1,
    "maximum":12
    },
    "year":{
    "type":"integer",
    "minimum":0
    }
    }
    }
    }
    }
    }
    根据 5.1 类型 in the spec ,这是不可能的,但这似乎是一个基本用例!

    最佳答案

  • 正如您正确理解的那样,$schema可用于指定它符合的模式。
  • 我实际上是在谷歌搜索 JSON Schema 版本控制时发现了这个主题,并且使用 URI 进行版本控制的想法听起来很合乎逻辑。
  • 您可以使用 $ref链接到另一个随后被拉入的模式。
  • 同样,您可以使用 $refJSON Pointer从其他模式导入定义。

  • 您可以随时通过 validating 进行测试。您的架构以查看您是否犯了任何错误。

    关于json - 关于自定义json schema的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8204023/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com