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

我应该如何内联获取 JSON 引用而不是获取它引用 - 不应该有其他属性 附加属性:定义

百里智勇
2023-03-14

我是JsonSchema的新手,我正在尝试生成swagger(3.0) JSON。我使用的是NJsonSchema。它已经成功地为模型生成了JSON模式。唯一的问题是JSON引用了复杂类型。我在http://editor.swagger.io/测试了生成的JSON,UI生成得很好,但是我有很多结构错误。

paths./xyz/asd/abc/.schema 上的结构错误不应具有其他属性 附加属性:定义

下面是可以在上面的链接上测试的示例JSON。

{
  "openapi": "3.0.1",
  "info": {
    "title": "SomeTitle",
    "description": "someDescription",
    "version": "v1"
  },
  "paths": {
    "/Device": {
      "get": {
        "summary": "someSummary",
        "tags": [
          "Device"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "deviceId",
            "required": true,
            "schema": {
              "type": "string",
              "nullable": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "title": "SomeTitleAgain",
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "id"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "udiCarrier": {
                      "$ref": "#/paths/~1Device/get/responses/200/content/application~1json/schema/definitions/ListOfUdiCarrierComponent"
                    }
                  },
                  "definitions": {
                    "ListOfUdiCarrierComponent": {
                      "type": "array",
                      "items": {
                        "$ref": "#/paths/~1Device/get/responses/200/content/application~1json/schema/definitions/UdiCarrierComponent"
                      }
                    },
                    "UdiCarrierComponent": {
                      "type": "object",
                      "additionalProperties": false,
                      "properties": {
                        "carrierHRF": {
                          "type": "string"
                        }}}}}}}}}}}},
  "components": {  }
}

我不认为NJsonSchema提供了摆脱模式引用处理的方法。所以生成的JSON总是有这些引用。

是否有任何方法可以处理此模式并内联获取引用?我还在网上寻找了NewtonsoftJson的IReferenceResolver示例,但无法清楚地了解如何使用它。

提前谢谢。

共有1个答案

申屠亦
2023-03-14

我已经用使用模式和$ref属性的正确方法更正了您的JSON文件:

{
  "openapi": "3.0.1",
  "info": {
    "title": "SomeTitle",
    "description": "someDescription",
    "version": "v1"
  },
  "paths": {
    "/Device": {
      "get": {
        "summary": "someSummary",
        "tags": [
          "Device"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "deviceId",
            "required": true,
            "schema": {
              "type": "string",
              "nullable": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ListOfUdiCarrierComponent"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ListOfUdiCarrierComponent": {
        "title": "SomeTitleAgain",
        "type": "object",
        "additionalProperties": false,
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "udiCarrier": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UdiCarrierComponent"
            }
          }
        }
      },
      "UdiCarrierComponent": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "carrierHRF": {
            "type": "string"
          }
        }
      }
    }
  }
}
 类似资料:
  • 我想问你,我应该如何设置和获取属性值?我应该这样做吗,例如直接从另一个类并将属性设置为公共属性,或者更好的做法是将属性设置为私有并更改它或通过使用此类中实现的公共函数来获取它? 第一种情况: 第二种情况: 这段代码显然有点简化...

  • 检索给定节点resp的所有属性名(而不是属性值!)的Xpath表达式看起来如何。xml标签? 假设以下XML文档: Xpath//title/@*会选择“eng,fr,easyreading”,但哪个Xpath会选择“lang,lang,type”?

  • 我正在开发一个Spring Boot服务,它受Key斗篷保护,并接受jwt承载令牌进行身份验证。 我还配置了swagger并将其注册为公共客户端,因此当我从swagger ui发出请求时,KeyClope会生成一个JWT令牌,然后swagger在向api发出请求时使用该令牌进行身份验证。 我还为用户信息创建了另外两个私有映射器。现在我想在我的spring控制器中获得这两个属性。 我觉得有点迷失在S

  • 问题内容: 如果我有这个: 如果可能的话,如何在不实际调用方法的情况下获得对f.bar的引用? 编辑添加:我想做的是编写一个对f的成员进行迭代并对其执行某些操作的函数(不重要)。属性让我感到震惊,因为仅在getattr()中命名它们会调用其__get __()方法。 问题答案: (下图)在给定对象的中查找,如果存在则返回关联的值。如果不是其中的关键,则搜索对象的MRO 。如果找不到密钥,则引发。

  • 我有根实体及其单个关联。 当我获取实体时,我需要急切地获取,但只有的3个属性:userId、afstName、lastName。 现在我的标准查询是: 接下来,我执行,我得到了sql语句,它只选择了投影列表中指定的的3个属性。但它不选择根<code>Hostel</code>实体的任何属性。生成的查询为: 此查询不起作用,因为它返回五个空的。五个映射是因为有五个<code>Hostel</code

  • 问题内容: 我正在尝试从解码为PHP对象的JSON数据中获取一个属性。这只是一个YouTube数据API请求,它返回具有内容对象的视频对象。 在做 抛出“意外的T_DNUMBER”-这很合理。但是,如何获得数字属性的值? 我确定我应该知道这一点。提前致谢。 问题答案: 这应该工作: