GoldenFleece 1.2.2

GoldenFleece 1.2.2

测试已测试
Lang语言 Obj-CObjective C
许可证 Apache 2
发布最新发布2014年12月

未声明 维护。



 
依赖
AFNetworking~> 1.3.2
NSDate+Helper~> 0.0.1
ISO8601DateFormatter~> 0.6
 

  • Alex Nauda

寻找更好的 JSON API 的奇遇之旅

GoldenFleece 是一个 Objective-C JSON 辅助工具,灵感来自于 Jackson

  • 它可以将您的自定义 Objective-C 对象序列化为 JSON,并将 JSON 反序列化为您的自定义 Objective-C 对象。
  • 它使用平凡的 Objective-C 对象(任何 NSObject 的子类)并且不需要您扩展任何基对象。
  • 它包括 GFClient,一个基于优秀且流行的 AFNetworking 的 JSON API 客户端辅助工具。

除了下面的示例之外,此存储库还包括一个最小的 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"
             };
}