您的位置:首页 > Web前端 > JavaScript

JSON序列化为实体对象

2015-06-29 10:05 543 查看
1、JSON 文本,文件名 applications.json

[
{
"display_name": "500px",
"developer_name": "500px",
"identifier": "471965292"
},
{
"display_name": "Airbnb",
"developer_name": "Airbnb, Inc.",
"identifier": "401626263"
},
{
"display_name": "AppStore",
"developer_name": "Apple, Inc.",
"identifier": ""
},
{
"display_name": "Camera",
"developer_name": "Apple, Inc.",
"identifier": ""
},
{
"display_name": "Dropbox",
"developer_name": "Dropbox, Inc.",
"identifier": "327630330"
},
{
"display_name": "Facebook",
"developer_name": "Facebook, Inc.",
"identifier": "284882215"
},
{
"display_name": "WWDC",
"developer_name": "Apple, Inc.",
"identifier": "640199958"
},
]


2、新建 Entity 对象类

#import <Foundation/Foundation.h>

//JSON 文件中去掉了一些类型
typedef NS_ENUM(NSUInteger, ApplicationType) {
ApplicationType500px,
ApplicationTypeAirbnb,
ApplicationTypeAppstore,
ApplicationTypeCamera,
ApplicationTypeDropbox,
ApplicationTypeFacebook,
ApplicationTypeFancy,
ApplicationTypeFoursquare,
ApplicationTypeiCloud,
ApplicationTypeInstagram,
ApplicationTypeiTunesConnect,
ApplicationTypeKickstarter,
ApplicationTypePath,
ApplicationTypePinterest,
ApplicationTypePhotos,
ApplicationTypePodcasts,
ApplicationTypeRemote,
ApplicationTypeSafari,
ApplicationTypeSkype,
ApplicationTypeSlack,
ApplicationTypeTumblr,
ApplicationTypeTwitter,
ApplicationTypeVideos,
ApplicationTypeVesper,
ApplicationTypeVine,
ApplicationTypeWhatsapp,
ApplicationTypeWWDC
};

@interface Application : NSObject
@property (nonatomic, strong) NSString *displayName;
@property (nonatomic, strong) NSString *developerName;
@property (nonatomic, strong) NSString *identifier;
@property (nonatomic, strong) NSString *iconName;
@property (nonatomic) ApplicationType type;

- (instancetype)initWithDictionary:(NSDictionary *)dict;

@end


#import "Application.h"

@implementation Application

- (instancetype)initWithDictionary:(NSDictionary *)dict
{
if (!dict) {
return nil;
}

self = [super init];
if (self) {
self.displayName = [dict objectForKey:@"display_name"];
self.developerName = [dict objectForKey:@"developer_name"];
self.identifier = [dict objectForKey:@"identifier"];
}
return self;
}

- (void)setDisplayName:(NSString *)displayName
{
_displayName = displayName;

self.iconName = [[[NSString stringWithFormat:@"icon_%@", self.displayName] lowercaseString] stringByReplacingOccurrencesOfString:@" " withString:@"_"];

self.type = applicationTypeFromString(self.displayName);
}

ApplicationType applicationTypeFromString(NSString *string)
{
//JSON 文件中去掉了一些类型
NSArray *arr = @[
@"500px",
@"Airbnb",
@"AppStore",
@"Camera",
@"Dropbox",
@"Facebook",
@"Fancy",
@"Foursquare",
@"iCloud",
@"Instagram",
@"iTunes Connect",
@"Kickstarter",
@"Path",
@"Pinterest",
@"Photos",
@"Podcasts",
@"Remote",
@"Safari",
@"Skype",
@"Slack",
@"Tumblr",
@"Twitter",
@"Videos",
@"Vesper",
@"Vine",
@"WhatsApp",
@"WWDC"
];
return (ApplicationType)[arr indexOfObject:string];
}

@end


3、读取并序列化 JSON ,把读取的信息,封装到 Entity 对象中

#pragma mark - Serialization
//序列化数据
- (void)serializeApplications
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"applications" ofType:@"json"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSArray *objects = [[NSJSONSerialization JSONObjectWithData:data options:kNilOptions|NSJSONWritingPrettyPrinted error:nil] mutableCopy];

self.applications = [NSMutableArray new];

for (NSDictionary *dictionary in objects) {
Application *app = [[Application alloc] initWithDictionary:dictionary];
[self.applications addObject:app];
}
}


4、调用序列化方法

@interface MainViewController ()

//保存 JSON 数据的 数组
@property (nonatomic, strong) NSMutableArray *applications;

@end

@implementation MainViewController

- (void)awakeFromNib
{
[super awakeFromNib];

//序列化数据
[self serializeApplications];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: