YYJSONHelper 1.0.7

YYJSONHelper 1.0.7

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2016年1月

Maintained by JianghuaiLi, dcty.



  • 作者:
  • Ivan

YYJSON

2.0 版本已经上传,由于作者太懒,不做之前版本的兼容,所以一时间不提交了,不然 pod 一更新就跪了,建议用 2.0 版本因为 1.x 的可能不维护了,当然有问题的话,尽管提,有问题就改,因为 2.0 我没怎么测试我会乱说。

2.0 的实现和 1.x 类似,实质上没有太大区别,但代码上可能比之前更少。

将 JSON 数据直接转换为 NSObject
支持 NSString,NSNumber,int,float,BOOL,NSArray,OtherModel。

2014-07-15 10:44:07 update

从dict取值改为valueForkeyPath,支持用路径来取值了

@interface Test1 : NSObject
@property (assign,nonatomic)int code;
@property (strong,nonatomic)Data *data;
@property (copy,nonatomic)NSString *country;
@property (strong,nonatomic)Data *subdata;
@end
@implementation Test1

+ (void)initialize
{
    [super initialize];
    [self bindYYJSONKey:@"data.country" toProperty:@"country"];
    //country不是自定义的NSObject所以不需要特殊处理
    [self bindYYJSONKey:@"data.subdata" toProperty:@"subdata.Data"]; 
    //对应的是subdata property设置为 subdata.ClassName就可了 一般情况这种蛋疼的写法很少吧,不过还是做一下支持。
}
@end

json 数据如下
{
"code": 0,
"data": {
    "subdata": {
        "country": "米国"
    },
    "country": "中国",
    "country_id": "CN",
    "area": "华东",
    "area_id": "300000",
    "region": "安徽省",
    "region_id": "340000",
    "city": "合肥市",
    "city_id": "340100",
    "county": "",
    "county_id": "-1",
    "isp": "电信",
    "isp_id": "100017",
    "ip": "218.22.9.4"
}




update:2013-07-17
新增 

- (NSString *)YYJSONString;

- (NSData *)YYJSONData;

在 Demo 中可以看到。


支持自行选择 JSON 解析器

- NSData (YYJSONHelper)

-(id)YYJSONObject

据悉,截止到 6 月 29 日,94% 的 iOS 用户已升级至 iOS 6。仅有 5% 的用户停留在 iOS 5,iOS 5 以下的版本占 1%。

因此目前只采用 iOS 自带 NSJSONSerialization。


使用方法

-(id)toModel:(Class)modelClass;
传入一个 modelClass 返回一个 modelClass 实例

-(id)toModel:(Class)modelClass forKey:(NSString *)key;
传入一个 modelClass 和 key (json 的 key) 返回一个 modelClass 实例

-(NSArray *)toModels:(Class)modelClass;
传入一个 modelClass 返回一个 modelClass 的集合

-(NSArray *)toModels:(Class)modelClass forKey:(NSString *)key;
传入一个 modelClass 和 key (json 的 key) 返回一个 modelClass 的集合

NSURL *url = [NSURL URLWithString:@"http://url.cn/DjjSlB"];  
NSData *data = [NSData dataWithContentsOfURL:url];  
NSArray *shots = [data toModels:[Shot class] forKey:@"shots"];  
Player *player = [shots[0] player];

支持自行绑定属性名和 JSON 对应的 key

@interface NSObject (YYJSON)
//如果需要获取父类的属性,则重载此方法并且return YES
+ (BOOL)YYSuper;
//映射的字典
+ (NSDictionary *)YYJSONKeyDict;
//自定义绑定 
+ (void)bindYYJSONKey:(NSString *)jsonKey toProperty:(NSString *)property;
@end

具体使用方法看 Demo 吧