在 Swift 中定义 JSON Schema 的便捷方式。
JSONSchema
提供了一种 Swift 原生的方式来以编程方式定义 JSON Schema 定义。 此软件包利用 Swift 的类型系统来创建清晰、简洁且类型安全的 JSON Schema 定义。
您可以使用 Swift Package Manager 将 JSONSchema
作为依赖项添加到您的项目中,方法是将其添加到 Package.swift
的 dependencies 值中。
dependencies: [
.package(url: "https://github.com/kevinhermawan/swift-json-schema.git", .upToNextMajor(from: "1.0.0"))
],
targets: [
.target(
/// ...
dependencies: [.product(name: "JSONSchema", package: "swift-json-schema")])
]
或者,在 Xcode 中
File
-> Swift Packages
-> Add Package Dependency...
https://github.com/kevinhermawan/swift-json-schema.git
Add Package
。您可以在此处找到文档:https://kevinhermawan.github.io/swift-json-schema/documentation/jsonschema
import JSONSchema
let emailSchema = JSONSchema.string(
description: "User's email address",
pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"
)
let priceSchema = JSONSchema.number(
description: "Product price",
minimum: 0.01,
exclusiveMaximum: 1000000
)
let ageSchema = JSONSchema.integer(
description: "User's age",
minimum: 0,
maximum: 120
)
let statusSchema = JSONSchema.enum(
description: "User's status",
values: [
.string("active"),
.string("inactive"),
.string("pending")
]
)
let userSchema = JSONSchema.object(
description: "User object",
properties: [
"id": .integer(minimum: 1),
"name": .string(minLength: 1),
"email": emailSchema,
"age": ageSchema,
"status": statusSchema
],
required: ["id", "name", "email", "status"]
)
let tagsSchema = JSONSchema.array(
description: "User's tags",
items: .string(minLength: 1),
minItems: 1,
maxItems: 10,
uniqueItems: true
)
对于更复杂的 schema,您可以将 schema 彼此嵌套
let productSchema = JSONSchema.object(
properties: [
"id": .integer(minimum: 1),
"name": .string(minLength: 1, maxLength: 100),
"price": priceSchema,
"tags": .array(
items: .string(),
uniqueItems: true
),
"settings": .object(
properties: [
"inStock": .boolean(),
"size": .enum(values: [.string("small"), .string("medium"), .string("large")])
]
)
],
required: ["id", "name", "price"]
)
您也可以使用 JSON 字符串创建相同的 schema
do {
let jsonString = """
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"price": {
"type": "number",
"minimum": 0.01,
"exclusiveMaximum": 1000000
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"settings": {
"type": "object",
"properties": {
"inStock": {
"type": "boolean"
},
"size": {
"type": "string",
"enum": ["small", "medium", "large"]
}
}
}
},
"required": ["id", "name", "price"]
}
"""
let productSchema = try JSONSchema(jsonString: jsonString)
} catch {
print(String(describing: error))
}
如果您觉得 JSONSchema
有用并希望支持其开发,请考虑捐款。 您的贡献有助于维护项目并开发新功能。
非常感谢您的支持! ❤️
欢迎贡献!如果您有任何建议或改进,请打开一个 issue 或提交一个 pull request。
本仓库基于 Apache License 2.0 授权。