我想从命令行将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文件的差异应为空。
答案 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格式。
有关选项,请查看此处:
答案 3 :(得分:5)
作为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