SVJsonSchemaValidator 0.0.7

SVJsonSchemaValidator 0.0.7

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新版本2014年12月

未申明的所有者 维护。



  • Max Lunin

** 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* );// 此属性是一个对象,包含属性定义,用于定义实例对象属性的有效取值。实例对象属性值必须符合此对象的属性定义。在此对象中,每个属性定义的值必须是一个架构,属性的名字必须是它所定义的实例属性的名字。实例属性值必须符合属性定义中的架构。属性被认为是无序的,实例属性的位置可以是任意顺序。