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

时间:2016-01-11 23:49:14

标签: json command-line yaml swagger

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

我想在不使用Python或Ruby的情况下这样做 我还希望能够在格式化JSON时控制前导空格,以便与Swagger的editor.swagger.io编辑器输出的JSON完全匹配,当您选择File时 - &gt ; Download JSON

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

{
    "swagger": "2.0",
    "info": {
        "title": "API TITLE",

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

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

7 个答案:

答案 0 :(得分:22)

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

运行

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

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

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

答案 1 :(得分:5)

使用yamljs

yaml2json swagger.yaml -p -i4

此命令的输出与来自editor.swagger.io的JSON输出的差异产生了空差异。

这确实是我正在寻找的,但它带来了巨大的依赖(节点)。我希望有更轻松的东西,但同样优雅。

答案 2 :(得分:5)

您可以使用在线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"

将swagger定义的值放在spec对象中。您将获得一个链接以下载转换后的&经过验证的规范,采用yaml格式。

有关选项,请查看此处:

http://generator.swagger.io/

答案 3 :(得分:5)

swagger-codegen cli接口

作为Liel has already pointed out,您可以运行

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

现在我可以运行docker-compose run gen-swagger

答案 4 :(得分:2)

对于版本 swagger-codegen 3.0.4

使用

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

获得.json

答案 5 :(得分:1)

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

npm install -g swagger-cli

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

swagger-cli bundle -o api-spec.json api-spec.yml

答案 6 :(得分:0)

我会使用 https://openapi-generator.tech/

这是一个 npm 安装(我只是在本地使用它 npm install @openapitools/openapi-generator-cli)然后

npx @openapitools/openapi-generator-cli generate -i source.yaml -g openapi -o outputdir