NSTEasyJSON 1.0.6

NSTEasyJSON 1.0.6

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2018年6月

Timur Bernikovich维护。



  • 作者:
  • Timur Bernikovich

NSTEasyJSON

灵感来自 SwiftyJSON。NSTEasyJSON 使得在 Objective-C 中处理 JSON 数据变得简单。

  1. 为什么 Objective-C 中的典型 JSON 处理不好
  2. 要求
  3. 集成
  4. 用法

为什么 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+)

要手动将此库用于您的项目,您可能

  1. 对于项目,只需将 NSTEasyJSON.{h,m} 拖到项目树中
  2. 对于工作区,包含整个 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;