我想将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",
我没有在上面的链接中尝试过Python方法,但Ruby方法使用了两个空格空格填充.也许有一种方法可以控制它,但我不想在这个解决方案中使用Ruby或Python.
我确信这个问题有很多"正确"的答案.我正在寻找最优雅,最少依赖的解决方案.理想情况下,生成的JSON文件与editor.swagger.io生成的JSON文件的差异应为空.
我认为你正在寻找swagger-codegen功能:
运行
swagger-codegen generate -i swagger.yaml -l swagger
将把swagger.json放在同一个位置.
更新CI: 如果您可以在您的构建计算机上安装它 - 对您有好处.如果你不能 - github页面有一个到达docker图像的链接,nodejs服务器可用(使用curl命令进行转换,如另一个答案所示).
使用yamljs:
yaml2json swagger.yaml -p -i4
该命令的输出与editor.swagger.io的JSON输出进行差异比较会产生一个空的差异。
这确实是我要寻找的,但是它带来了巨大的依赖关系(节点)。我希望找到更轻巧但同样优雅的东西。
您可以使用在线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/
正如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
现在我可以跑步 docker-compose run gen-swagger
对于版本swagger-codegen 3.0.4
使用
swagger-codegen generate -i my_yaml.yaml -l openapi
得到一个.json
。