iOS 数据转 JSON
在 iOS 开发中,我们经常需要将数据转换为 JSON 格式,以便与服务器进行数据交互或者保存到本地。JSON(JavaScript Object Notation)是一种常用的数据交换格式,它使用人类可读的文本来表示数据对象,具有简洁、易于解析的特点。
本文将介绍如何在 iOS 中将数据转换为 JSON 格式,并提供相应的代码示例,帮助读者快速掌握这一技巧。
1. iOS 中的 JSON 库
在 iOS 开发中,我们可以使用 Foundation 框架中的 NSJSONSerialization 类将数据转换为 JSON。
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data options:NSJSONWritingPrettyPrinted error:&error];
if (!jsonData) {
NSLog(@"转换为 JSON 失败:%@", error);
return;
}
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"JSON 字符串:%@", jsonString);
如上所示,我们首先使用 dataWithJSONObject:options:error: 方法将数据对象转换为 JSON 格式的 NSData。参数 options 可以用来指定 JSON 序列化的选项,例如是否格式化输出等。然后,我们将 NSData 转换为 NSString,以方便打印或者发送到服务器。
2. 数据转换为 JSON
在将数据转换为 JSON 之前,我们需要确保数据对象是可以被 JSON 序列化的。一般来说,iOS 中的基本数据类型(如 NSString、NSNumber、NSArray、NSDictionary)都可以直接转换为 JSON。如果我们的数据对象是自定义的类,我们需要遵循 NSCoding 协议并实现相关方法,以便让系统知道如何将数据对象转换为 JSON。
@interface Person : NSObject <NSCoding>
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@end
@implementation Person
- (instancetype)initWithCoder:(NSCoder *)coder {
self = [super init];
if (self) {
self.name = [coder decodeObjectForKey:@"name"];
self.age = [coder decodeIntegerForKey:@"age"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:self.name forKey:@"name"];
[coder encodeInteger:self.age forKey:@"age"];
}
@end
上述示例中,我们定义了一个 Person 类,并实现了 NSCoding 协议的两个方法 initWithCoder: 和 encodeWithCoder:。这样,我们就可以将 Person 类的对象转换为 JSON。
Person *person = [[Person alloc] init];
person.name = @"John";
person.age = 30;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:person options:NSJSONWritingPrettyPrinted error:&error];
if (!jsonData) {
NSLog(@"转换为 JSON 失败:%@", error);
return;
}
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"JSON 字符串:%@", jsonString);
3. 从 JSON 解析数据
除了将数据转换为 JSON,我们还经常需要从 JSON 中解析数据。在 iOS 中,同样可以使用 NSJSONSerialization 类来完成这个任务。
NSString *jsonString = @"{\"name\":\"John\",\"age\":30}";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (!jsonObject) {
NSLog(@"解析 JSON 失败:%@", error);
return;
}
if ([jsonObject isKindOfClass:[NSDictionary class]]) {
NSDictionary *jsonDict = (NSDictionary *)jsonObject;
NSString *name = jsonDict[@"name"];
NSInteger age = [jsonDict[@"age"] integerValue];
NSLog(@"姓名:%@,年龄:%ld", name, (long)age);
}
上述示例中,我们首先将 JSON 字符串转换为 NSData,然后使用 JSONObjectWithData:options:error: 方法将数据解析为 NSDictionary。最后,我们从字典中获取相应的值。
总结
本文介绍了在 iOS 中将数据转换为 JSON 的方法,并提供了相应的代码示例。通过使用 NSJSONSerialization 类,我们可以轻松地实现数据与 JSON 的互相转换,以满足服务器交










