测试已测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可证 | Apache 2 |
发布最新发布 | 2014年12月 |
由 未声明 维护。
依赖 | |
AFNetworking | ~> 1.3.2 |
NSDate+Helper | ~> 0.0.1 |
ISO8601DateFormatter | ~> 0.6 |
寻找更好的 JSON API 的奇遇之旅
GoldenFleece 是一个 Objective-C JSON 辅助工具,灵感来自于 Jackson。
除了下面的示例之外,此存储库还包括一个最小的 Mac 应用程序,该应用程序运行一些针对 GitHub 公共 API 的测试请求,并可作为如何使用 GoldenFleece 编写 API 的示例。
让我们假设您正在消费(或想要生成)如下所示的 JSON
{
"itemId":"8675309",
"widgetCount":42
}
编写一个类似这样的 Objective-C 对象的代码
/*
* Item.h
*/
@interface Item : NSObject
@property (strong, nonatomic) NSString *itemId;
@property (strong, nonatomic) NSNumber *widgetCount;
@end
/*
* Item.m
*/
#import "Item.h"
@implementation Item
@end
GoldenFleece 将使用一行代码将此序列化和反序列化为 JSON。如果您有在 NSString 中的 JSON,它可能看起来像这样
Item *item = [[Item alloc] initWithJsonObject:[NSJSONSerialization JSONObjectWithData:[yourJsonString dataUsingEncoding:NSUTF8StringEncoding]]];
如果您是从 REST API 调用获取 JSON,请继续阅读以获取如何进行调用的示例。
GoldenFleece 还有一些更高级的功能,包括对嵌套自定义对象、数组中的自定义对象以及从 NSDate 到 ISO 8601 字符串格式的支持。
我们建议使用 Cocoapods。
pod 'GoldenFleece', '~> 1.1'
如果您希望将 GoldenFleece 手动安装到项目中,将 GoldenFleece 目录下的所有 *.m 和 *.h 文件包含进来。
只需在其中初始化一次,例如在您的应用程序委托中
#import <GFClient.h>
/* ... */
// initialize HTTPClient
NSURL *baseURL = [NSURL URLWithString:@"https://api.github.com"]; // the base URL of your API
AFHTTPClient* client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];
// initialize GoldenFleece
[GFClient createWithHttpClient:client];
调用 API
[[GFClient sharedInstance] jsonRequestWithObject:nil
path:[NSString stringWithFormat:@"gists/%@", gistId]
method:@"GET"
expectedClass:[GitHubGist class]
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id object) {
GitHubGist *result = (GitHubGist*)object;
[delegate getGistSucceeded:result];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
[delegate getGistError:error];
}
];
请求执行后,GoldenFleece 将为您的自定义对象(在此示例中为 GitHubGist)分配内存,并从 JSON 响应中填充它。如果响应包含数组,它将为您的自定义对象创建一个 NSArray。
您还可以在请求体中传递 JSON
[[GFClient sharedInstance] jsonRequestWithObject:comment // <-- this will be converted to JSON and sent as the request entity body
path:[NSString stringWithFormat:@"gists/%@/comments", gistId]
method:@"POST"
expectedClass:[GitHubComment class]
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id object) {
GitHubComment *result = (GitHubComment*)object;
[delegate postGistCommentSucceeded:result];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
[delegate postGistCommentError:error];
}
];
GoldenFleece 使用 Objective-C 反射来查看您的自定义对象,并为每个属性实例化适当的类。如果您有一个属性是 NSArray 或 NSDictionary,您可以指示 GoldenFleece 为其中的元素/值实例化您选择的自定义对象
- (NSDictionary*)jsonClasses {
return @{
@"forks" : [GitHubGist class]
};
}
默认情况下,GoldenFleece依赖于您的自定义对象中的属性与方法JSON对象中的键完全匹配。如果这不是您的情况,或者如果您正在处理的JSON发生了与Objective-C保留字冲突的情况,您可以为自定义映射指定。
- (NSDictionary*)jsonMapping {
return @{
// JSON key : property name
@"id": @"gistId"
};
}