** Objective-C 的简单 JSON 验证器 **
有关 JSON 模式的更多信息,请访问 json-schema.org
*安装 *
pod 'SVJsonSchemaValidator'
*使用 *
下一个 JSON 模式代表有两个键的 JSON
#import "SVJsonSchema.h"
NSString* numberKey= @"numberKey"; // floating point nymber type in range [0, 500).
NSString* arrayKey = @"arrayKey"; //with array, containing minimun 2 strings.
SVObject* object = [[SVType object] properties:@{
numberKey:[[[[SVType number]
minimum:@0] exclusiveMinimum:YES]
maximum:@500],
arrayKey:[[[SVType array] items:[SVType string]] minItems:@2]
}];
这是一段简单的 JSON
{
"numberKey": 100500,
"arrayKey":[ "123", "345", "678"]
}
现在您可以进行验证
id jsonObject = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding]
options:0
error:NULL];
NSError* error = nil;
id validatedJson = [object validateJson:jsonObject error:&error];
这就是全部!您可以在 validatedJson 变量中检查验证的 Objective-C 对象,如果有任何错误出现,则 error 变量将包含错误描述。
或者您有一个类
@interface SVModelObject : NSObject
@property (strong, nonatomic) NSString* string;
@property (strong, nonatomic) NSNumber* number;
@end
以及 JSON
{
"results":[
{"string":"1", "number":1},
{"string":"2", "number":2},
{"string":"3", "number":3},
{"string":"4", "number":4},
]
}
和对应的 JSON 模式
id schema = [[SVType object] properties:@{
@"results":[[SVType array] items:[SVModelObject jsonSchema]]
}];
验证完成后,您可以直接从 JSON 创建 SVModelObject 的实例
id validatedJson = [schema validateJson:jsonObject error:&error];
if ( !error )
{
NSDictionary* dictionary = [schema instantiateValidatedJson:validatedJson];
}
之后,变量 dictionary 将包含由 "results" 键的 SVModelObject 数组。
** 类型: **
SVArray - 一个 JSON 数组。
SVBoolean - 一个 JSON 布尔值。
SVInteger - 一个没有小数或指数部分的 JSON 整数。
SVNumber - 任何 JSON 数字。数字包括整数。
SVNull - JSON 的 null 值。
SVObject - 一个 JSON 对象。
SVString - 一个 JSON 字符串。
SVAny - 任何 JSON 类型。
对于任何 SVType,您可以设置
-defaultVal:( id );
// 此属性定义当实例未定义时实例的默认值。
-required:( BOOL );
// 此属性指示实例是否必须有一个值,且不能是未定义的。此属性默认为 false,使实例是可选的。
-enumValues:( NSArray* );
// 此属性提供实例属性所有可能的值。数组中的每个条目代表实例值的一个可能值。如果此属性已定义,则实例值必须是数组中的值之一,才能使模式有效。
*对于 SVArray: *
-items:( id );
// 此属性定义了实例数组中允许的项目,必须是模式或模式数组。默认值是一个空模式,它允许在实例数组中的任何值。当此属性值为模式且实例值为数组时,则数组中的所有项目都必须根据该模式有效。当此属性值为模式数组且实例值为数组时,则实例数组的每个位置都必须符合此数组的对应位置的方案。这被称为元组类型。
-minItems:( NSNumber* );
// 此属性定义了数组中的最小值数。
-maxItems:( NSNumber* );
// 此属性定义了数组中的最大值数。
-uniqueItems:( BOOL );
// 此属性指示数组实例中的所有项目必须唯一(不含有两个相同的值)。
*对于 SVNumber 或 SVInteger: *
-minimum:( NSNumber* );
// 此属性定义实例属性的最低值。
-maximum:( NSNumber* );
// 此属性定义实例属性的取值最大值。
-exclusiveMinimum:( BOOL );
// 此属性表示实例的值是否可以等于由 "minimum" 属性定义的数值。默认为 false,表示实例值可以是大于或等于最小值的。
-exclusiveMaximum( BOOL );
// 此属性表示实例的值是否可以等于由 "maximum" 属性定义的数值。默认为 false,表示实例值可以是小于或等于最大值的。
*对于 SVObject:* *
-properties:( NSDictionary* );
// 此属性是一个对象,包含属性定义,用于定义实例对象属性的有效取值。实例对象属性值必须符合此对象的属性定义。在此对象中,每个属性定义的值必须是一个架构,属性的名字必须是它所定义的实例属性的名字。实例属性值必须符合属性定义中的架构。属性被认为是无序的,实例属性的位置可以是任意顺序。