从命令行将Swagger YAML文件转换为JSON

mkr*_*fky 19 command-line json yaml swagger

我想将Swagger YAML文件JSON从命令行转换为.计划是在CI作业期间使用此命令行.我在google上搜索并找到了很多解决方案,但大多数都使用Python或Ruby,我不想使用它.例如:http://www.commandlinefu.com/commands/view/12218/convert-yaml-to-json

我想做到这一点,而无需使用Python或Ruby,我也希望能够格式化JSON精确匹配JSON是从扬鞭的输出时控制的前导空格editor.swagger.io编辑器,你什么时候选择File- >Download JSON

所有这些意味着我希望空格填充为四个空格,如下所示:

{
    "swagger": "2.0",
    "info": {
        "title": "API TITLE",
Run Code Online (Sandbox Code Playgroud)

我没有在上面的链接中尝试过Python方法,但Ruby方法使用了两个空格空格填充.也许有一种方法可以控制它,但我不想在这个解决方案中使用Ruby或Python.

我确信这个问题有很多"正确"的答案.我正在寻找最优雅,最少依赖的解决方案.理想情况下,生成的JSON文件与editor.swagger.io生成的JSON文件的差异应为空.

Lie*_*iel 22

我认为你正在寻找swagger-codegen功能:

运行

swagger-codegen generate -i swagger.yaml -l swagger

将把swagger.json放在同一个位置.

更新CI: 如果您可以在您的构建计算机上安装它 - 对您有好处.如果你不能 - github页面有一个到达docker图像的链接,nodejs服务器可用(使用curl命令进行转换,如另一个答案所示).

  • 我发现 `openapi-generator` 支持我拥有的 OpenAPI 规范。`swagger-codegen` 比较旧,并且似乎也有一些错误。我相信现在“openapi-generator”应该始终是首选。@Liel 也许更新你的答案? (2认同)

Seb*_*ian 11

将 swagger.yml 文件转换为 swagger.json 的另一种可能性是名为swagger-cli的 NPM 包。

npm install -g swagger-cli
Run Code Online (Sandbox Code Playgroud)

然后你可以将 yml 转换为 json 文件:

swagger-cli bundle -o api-spec.json api-spec.yml
Run Code Online (Sandbox Code Playgroud)


mkr*_*fky 6

使用yamljs

yaml2json swagger.yaml -p -i4
Run Code Online (Sandbox Code Playgroud)

该命令的输出与editor.swagger.io的JSON输出进行差异比较会产生一个空的差异。

这确实是我要寻找的,但是它带来了巨大的依赖关系(节点)。我希望找到更轻巧但同样优雅的东西。

  • 这种方式有一个严重的“弊端”:跨文件关系不被翻译。例如:`$ ref:'Pet.yaml'`应该被翻译成`$ ref:'Pet.json'` (3认同)

feh*_*guy 6

您可以使用在线swagger codegen项目来执行此操作:

curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d "{
  \"spec\": {}
}" "https://generator.swagger.io/api/gen/clients/swagger-yaml"
Run Code Online (Sandbox Code Playgroud)

将swagger定义的值放在spec对象中.您将获得一个链接,以yaml格式下载已转换和验证的规范.

有关选项,请查看此处:

http://generator.swagger.io/

  • 发电机现在不支持它,但它可以.我已经打开了这个问题,您可以跟踪进度:https://github.com/swagger-api/swagger-codegen/issues/1903 (3认同)

cke*_*ney 5

swagger-codegen cli接口

正如Liel已经指出的那样,您可以运行

swagger-codegen generate -i swagger.yaml -l swagger

码头工人

如果您使用Docker,则建议您尝试swaggerapi / swagger-codegen-cli

您可以通过以下命令使用docker生成json文件:

docker run -v ./docs:/docs swaggerapi/swagger-codegen-cli generate -i /docs/swagger.yaml -l swagger -o /docs

我喜欢设置一个docker-compose.yml“别名”此命令以方便重用:

version: "2"
services:
  gen-swagger:
    volumes:
      - ./docs:/docs
    image: swaggerapi/swagger-codegen-cli
    command: generate -i /docs/swagger.yaml -l swagger -o /docs
Run Code Online (Sandbox Code Playgroud)

现在我可以跑步 docker-compose run gen-swagger


kuz*_*zdu 5

对于版本swagger-codegen 3.0.4

使用

swagger-codegen generate -i my_yaml.yaml -l openapi

得到一个.json