NSTEasyJSON
灵感来自 SwiftyJSON。NSTEasyJSON 使得在 Objective-C 中处理 JSON 数据变得简单。
为什么 Objective-C 中的典型 JSON 处理不好?
Objective-C 对类型的限制不太严格,但即使不严格,我们也不能节省时间,因为我们必须自己检查类型以确保安全。
以 Twitter API 为例。假设我们想用 Objective-C 获取某个推文的 "name" 值(根据 Twitter API https://dev.twitter.com/docs/api/1.1/get/statuses/home_timeline)。
代码将如下所示
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
NSString *user = dictionary[@"user"];
// Now we got the username
// But is it NSString for sure?
我们得到了用户名,但 JSON 总是 NSDictionary 吗?API 是否发送 null
作为 user
键的值?为了安全起见,我们需要添加一些代码
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
if (![dictionary isKindOfClass:[NSDictionary class]]) {
// Print the error
}
NSString *user = dictionary[@"user"];
if (![user isKindOfClass:[NSString class]]) {
// Print the error
}
// There's our username
很简单,但绝对是不加注释的模板代码!
使用 NSTEasyJSON,你只需做以下操作
NSTEasyJSON *JSON = [NSTEasyJSON withData:dataFromNetworking];
NSString *userName = JSON[0]["user"]["name"].string;
// Now you got your value
而且不用担心 NSNull、超出范围或其他意外情况。这些都是自动完成的。
要求
- iOS 7.0+ | macOS 10.10+ | tvOS 9.0+ | watchOS 2.0+
- Xcode 7
集成
CocoaPods (iOS 7+, OS X 10.9+)
您可以使用 CocoaPods 通过将其添加到您的 Podfile
安装 NSTEasyJSON
platform :ios, '7.0'
target 'MyApp' do
pod 'NSTEasyJSON'
end
手动(iOS 7+, OS X 10.9+)
要手动将此库用于您的项目,您可能
- 对于项目,只需将 NSTEasyJSON.{h,m} 拖到项目树中
- 对于工作区,包含整个 NSTEasyJSON.xcodeproj
用法
初始化
#import "NSTEasyJSON.h"
NSTEasyJSON *JSON = [NSTEasyJSON withData:dataFromNetworking];
NSTEasyJSON *JSON = [NSTEasyJSON withObject:jsonObjectArrayOrMaybeDictionary];
下标
// Getting a double from a JSON Array
double name = JSON[0].doubleValue;
// Getting a string from a JSON Dictionary
NSString *name = json["name"].stringValue;
可选获取器
// NSNumber
NSNumber *number = JSON[@"user"][@"favourites_count"].number;
// NSString
NSString *string = JSON[@"user"][@"name"].string;
...
非必需获取器
非必需获取器命名为 xxx值
// If not a Number or nil, return 0
NSNumber *number = JSON[@"user"][@"favourites_count"].numberValue;
// If not a String or nil, return ""
NSString *string = JSON[@"user"][@"name"].stringValue;
// If not an Array or nil, return @[]
NSArray *list = JSON[@"list"].arrayValue;
// If not a Dictionary or nil, return @{}
NSDictionary *dictionary = JSON[@"user"].dictionaryValue;