You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swagger(优先Swagger-Lume)中描述JSON数组及指定结构?

如何在Swagger(含Swagger-Lume)中描述JSON数组及示例结构

嘿,我来帮你搞定这个问题——不管是通用的JSON数组描述,还是你给出的那个汽车厂商+车型的嵌套结构,用Swagger(特别是你提到的Swagger-Lume)都很清晰,下面一步步来:

一、Swagger中描述JSON数组的通用方法

Swagger(基于OpenAPI 2.0,也就是Swagger-Lume默认支持的版本)里描述数组核心靠两个字段:

  • type: array:标记当前字段是数组类型
  • items:定义数组里每个元素的结构,分两种情况:
    • 简单类型数组(比如纯字符串/数字数组):直接在items里指定type,比如字符串数组就写items: { type: string }
    • 对象数组:在items里完整定义对象的Schema,包括对象的所有属性、类型和描述

二、针对你给出的JSON结构的具体写法

先再明确下你提供的JSON结构:

{
"cars": [
{ "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
{ "name":"BMW", "models":[ "320", "X3", "X5" ] },
{ "name":"Fiat", "models":[ "500", "Panda" ] }
]
}

这是一个嵌套数组结构:根对象的cars是对象数组,每个对象里又包含models这个字符串数组。下面给出Swagger-Lume支持的两种常见写法:

1. 直接编写Swagger YAML配置文件(swagger.yml)

Swagger-Lume可以直接读取项目里的swagger.yml文件生成文档,写法如下:

swagger: '2.0'
info:
  title: 汽车数据API
  version: '1.0.0'
paths:
  /cars:
    get:
      summary: 获取汽车厂商及对应车型列表
      responses:
        200:
          description: 请求成功,返回完整汽车数据
          schema:
            type: object
            required:
              - cars  # 标记cars是必填字段
            properties:
              cars:
                type: array
                description: 汽车厂商列表
                items:
                  type: object
                  required:
                    - name
                    - models  # 每个厂商对象的必填字段
                  properties:
                    name:
                      type: string
                      description: 汽车厂商的品牌名称
                    models:
                      type: array
                      description: 该厂商旗下的车型列表
                      items:
                        type: string
                        description: 具体车型名称

2. Laravel控制器注解写法(Swagger-Lume推荐方式)

如果你的项目是Laravel,用Swagger-Lume的注解方式更贴合开发流程,直接在控制器方法上添加Swagger注释即可:

/**
 * @SWG\Get(
 *     path="/cars",
 *     summary="获取汽车厂商及对应车型列表",
 *     @SWG\Response(
 *         response=200,
 *         description="请求成功,返回完整汽车数据",
 *         @SWG\Schema(
 *             type="object",
 *             required={"cars"},
 *             @SWG\Property(
 *                 property="cars",
 *                 type="array",
 *                 description="汽车厂商列表",
 *                 @SWG\Items(
 *                     type="object",
 *                     required={"name", "models"},
 *                     @SWG\Property(
 *                         property="name",
 *                         type="string",
 *                         description="汽车厂商的品牌名称"
 *                     ),
 *                     @SWG\Property(
 *                         property="models",
 *                         type="array",
 *                         description="该厂商旗下的车型列表",
 *                         @SWG\Items(
 *                             type="string",
 *                             description="具体车型名称"
 *                         )
 *                     )
 *                 )
 *             )
 *         )
 *     )
 * )
 */
public function getCarList()
{
    // 这里写你的业务逻辑,返回对应格式的JSON
}

关键要点总结

  • 嵌套数组的核心就是层层定义:外层数组的items是对象,对象里的数组字段再用type: array+items定义元素类型
  • required字段可以标记必须存在的属性,让文档更严谨,也能帮助调用方明确参数/返回值的必填项

内容的提问来源于stack exchange,提问作者Veljko Sirovljević

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:11:47