-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathYYJSONHelper.h
More file actions
140 lines (94 loc) · 3.09 KB
/
YYJSONHelper.h
File metadata and controls
140 lines (94 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
//
// Created by ivan on 13-7-17.
//
//
#import "objc/runtime.h"
#import <Foundation/Foundation.h>
typedef id(^YYModel)(id data);
typedef id(^YYModelForKey)(NSString *key, id data);
typedef id(^YYModels)(id data);
typedef id(^YYModelsForKey)(NSString *key, id data);
@protocol YYJSONHelperProtocol
@end
@interface YYJSONParser : NSObject
@property(strong, nonatomic) Class clazz; //要转换成什么class
@property(assign, nonatomic) BOOL single; //是否单个
@property(strong, nonatomic) NSString *key; //key
@property(strong, nonatomic) id result; //结果
@property(readonly, nonatomic) id smartResult;
- (instancetype)initWithKey:(NSString *)key clazz:(Class)clazz single:(BOOL)single;
+ (instancetype)objectWithKey:(NSString *)key clazz:(Class)clazz single:(BOOL)single;
+ (instancetype)objectWithKey:(NSString *)key clazz:(Class)clazz;
@end
@interface NSObject (YYJSONHelper)
/**
* 如果model需要取父类的属性,那么需要自己实现这个方法,并且返回YES
*/
+ (BOOL)YYSuper;
/**
* 映射好的字典
* {jsonkey:property}
*/
+ (NSDictionary *)YYJSONKeyDict;
/**
* 自己绑定jsonkey和property
* 如果没有自己绑定,默认为 {jsonkey:property} 【jsonkey=property】
*/
+ (void)bindYYJSONKey:(NSString *)jsonKey toProperty:(NSString *)property;
/**
* 返回jsonString
*/
- (NSString *)YYJSONString;
/**
* 返回jsonData
*/
- (NSData *)YYJSONData;
/**
* 返回json字典,不支持NSArray
*/
- (NSDictionary *)YYJSONDictionary;
/**
* 防止服务端返回的数据不对 导致没找到此方法造成的闪退
*/
- (NSArray *)toModels:(Class)modelClass;
- (NSArray *)toModels:(Class)modelClass forKey:(NSString *)key;
- (id)toModel:(Class)modelClass;
- (id)toModel:(Class)modelClass forKey:(NSString *)key;
+ (id)objectWithDataOrString:(id)object forKey:(NSString *)key;
+ (NSArray *)objectsWithDataOrString:(id)object forKey:(NSString *)key;
+ (YYModel)YYModel;
+ (YYModelForKey)YYModelForKey;
+ (YYModels)YYModels;
+ (YYModelsForKey)YYModelsForKey;
@end
@interface NSObject (YYProperties)
/**
* 根据传入的class返回属性集合
*/
const char *property_getTypeString(objc_property_t property);
- (NSArray *)yyPropertiesOfClass:(Class)aClass;
+ (NSString *)propertyConformsToProtocol:(Protocol *)protocol propertyName:(NSString *)propertyName;
@end
@interface NSString (YYJSONHelper)
@end
@interface NSDictionary (YYJSONHelper)
- (id)yyObjectForKey:(id)key;
@end
@interface NSData (YYJSONHelper)
/**
* @brief 通过key拿到json数据
*/
- (id)valueForJsonKey:(NSString *)key;
/**
* @brief 通过key集合拿到对应的key的json数据字典
*/
- (NSDictionary *)dictForJsonKeys:(NSArray *)keys;
/**
* @brief 解析结果直接在parser的result字段里面,这个方法主要是为了提高解析的效率
* 如果一个json中有多个key ex:{用户列表,商品列表、打折列表}那么传3个解析器进来就好了,不会对data进行三次重复的解析操作
* @param parsers 要解析为json的解析器集合
*/
- (void)parseToObjectWithParsers:(NSArray *)parsers;
@end
@interface NSArray (YYJSONHelper)
@end