Cwe*_*lan 14 json jsonschema swagger swagger-2.0
我已经获得了REST API生成的一些JSON文件,这些文件具有大量属性.
我为这个API创建了一个Swagger 2.0定义,需要为它提供相应的响应模式.
主要问题:这个JSON文件有很多属性.这需要花费很多时间,如果我手动编写模式,我会犯很多错误.它不是我需要描述的唯一API.
我知道有一些工具可以将JSON转换为JSON模式但是,如果我没有弄错,Swagger只有$ refs到其他对象定义,因此只有一个级别,而我发现的工具只生成树结构模式.我的问题:是否有任何工具可以将JSON(或JSON Schema)转换为兼容Swagger 2.0的工具?
注意:我在YAML工作,但我不会成为问题,是吗?
例如,我需要的是:
List of Movements:
type: "array"
items:
$ref: "#/definitions/Movement"
Movement:
properties:
dateKey:
type: "string"
movement:
$ref: "#/definitions/Stock"
additionalProperties: false
Stock:
properties:
stkUnitQty:
type: "string"
stkDateTime:
type: "string"
stkUnitType:
type: "string"
stkOpKey:
type: "string"
additionalProperties: false
Run Code Online (Sandbox Code Playgroud)
对于我的JSON文档:
[
{
"dateKey": "20161110",
"stkLvls": [
{
"stkOpKey": "0",
"stkUnitType": "U",
"stkDateTime": "20161110T235010.240+0100",
"stkUnitQty": 30
}
]
},
{
"dateKey": "20161111",
"stkLvls": [
{
"stkOpKey": "0",
"stkUnitType": "U",
"stkDateTime": "20161111T231245.087+0100",
"stkUnitQty": 21
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
但是,http://jsonschema.net/#/给了我什么:
---
"$schema": http://json-schema.org/draft-04/schema#
type: array
items:
type: object
properties:
dateKey:
type: string
stkLvls:
type: array
items:
type: object
properties:
stkOpKey:
type: string
stkUnitType:
type: string
stkDateTime:
type: string
stkUnitQty:
type: integer
required:
- stkOpKey
- stkUnitType
- stkDateTime
- stkUnitQty
required:
- dateKey
- stkLvls
Run Code Online (Sandbox Code Playgroud)
我是新手,但很好奇,不要犹豫,深刻解释.
预先感谢您的帮助 !
mat*_*scb 32
我还需要一个转换器工具,并遇到了这个问题.到目前为止它似乎工作得很好.它同时执行JSON和YAML格式.
https://swagger-toolbox.firebaseapp.com/
鉴于此JSON(他们的样本):
{
"id": 1,
"name": "A green door",
"price": 12,
"testBool": false,
"tags": [
"home",
"green"
]
}
Run Code Online (Sandbox Code Playgroud)
它生成了这个:
{
"required": [
"id",
"name",
"price",
"testBool",
"tags"
],
"properties": {
"id": {
"type": "number"
},
"name": {
"type": "string"
},
"price": {
"type": "number"
},
"testBool": {
"type": "boolean"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
import json
# input file containing json file
with open('data.json') as f:
json_data = json.load(f)
# json schema in yaml format
out = open('out.yaml','w')
def gettype(type):
for i in ['string','boolean','integer']:
if type in i:
return i
return type
def write(string):
print(string)
out.write(string+'\n')
out.flush()
def parser(json_data,indent):
if type(json_data) is dict:
write(indent + 'type: object')
if len(json_data) > 0:
write(indent + 'properties:')
for key in json_data:
write(indent + ' %s:' % key)
parser(json_data[key], indent+' ')
elif type(json_data) is list:
write(indent + 'type: array')
write(indent + 'items:')
if len(json_data) != 0:
parser(json_data[0], indent+' ')
else:
write(indent + ' type: object')
else:
write(indent + 'type: %s' % gettype(type(json_data).__name__))
parser(json_data,'')
Run Code Online (Sandbox Code Playgroud)
import json
import yaml
# input file containing json file
with open('data.json') as f:
json_data = json.load(f)
# json schema in yaml format
def gettype(type):
for i in ['string','boolean','integer']:
if type in i:
return i
return type
def parser(json_data):
d = {}
if type(json_data) is dict:
d['type'] = 'object'
for key in json_data:
d[key] = parser(json_data[key])
return d
elif type(json_data) is list:
d['type'] = 'array'
if len(json_data) != 0:
d['items'] = parser(json_data[0])
else:
d['items'] = 'object'
return d
else:
d['type'] = gettype(type(json_data).__name__)
return d
p = parser(json_data)
with open('out.yaml','w') as outfile:
yaml.dump(p,outfile, default_flow_style=False)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16810 次 |
| 最近记录: |