Objective-C Json 实例详解
什么是JSON?
JSON是一种轻量级的数据交换格式,它是基于JavaScript对象语法的子集,易于人们理解和编写,也易于计算机解析和生成。在近年来的web开发中,JSON已经成为前后端数据交互最常用的格式之一。
使用Objective-C解析JSON
在Objective-C中,解析JSON非常方便,可以使用系统自带的NSJSONSerialization来完成。
将JSON数据解析为Objective-C对象
通过NSJSONSerialization的类方法JSONObjectWithData:options:error:可以将接收到的JSON数据转化为Objective-C对象。其中,NSData类型的参数data为接收到的JSON数据,options参数用于设置解析方式,error用于存储错误信息。
示例代码:
//接收到的JSON数据
NSData *jsonData = ...;
NSError *error = nil;
//解析JSON数据为Objective-C对象
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (error != nil) {
NSLog(@"解析失败:%@", error);
} else {
NSLog(@"解析结果:%@", jsonObject);
}
将Objective-C对象转化为JSON数据
通过NSJSONSerialization的类方法dataWithJSONObject:options:error:可以将Objective-C对象转化为JSON数据。其中,id类型的参数JSONObject为需要被转化的Objective-C对象,options参数用于设置转化方式,error用于存储错误信息。
示例代码:
//需要被转化为JSON数据的Objective-C对象
NSDictionary *dict = @{@"name": @"Tom", @"age": @20};
NSError *error = nil;
//将Objective-C对象转化为JSON数据
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
if (error != nil) {
NSLog(@"转化失败:%@", error);
} else {
//将NSData类型的JSON数据转化为NSString类型
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"转化结果:%@", jsonString);
}
实例说明
示例1
假如我们的网站需要提供一个接口,可以查询学生的信息,查询结果应当以JSON格式返回。我们可以使用NSDictionary的方式存储学生的信息,然后使用NSJSONSerialization将NSDictionary类型的学生信息转化为JSON数据返回给客户端的请求。
//学生的数据结构
NSDictionary *student = @{
@"name": @"Jack",
@"age": @18,
@"gender": @"male",
@"score": @[
@{@"course": @"math", @"grade": @90},
@{@"course": @"english", @"grade": @95},
@{@"course": @"chinese", @"grade": @80}
]
};
NSError *error = nil;
//将NSDictionary类型的学生信息转化为JSON数据
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:student options:NSJSONWritingPrettyPrinted error:&error];
if (error != nil) {
NSLog(@"转化失败:%@", error);
} else {
//将NSData类型的JSON数据转化为NSString类型
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"转化结果:%@", jsonString);
//返回转化后的JSON数据给客户端的请求
//...
}
示例2
假设我们的网站需要提供一个接口,可以用户提交评论,并将该评论的JSON数据存储到文件中。这个过程可以分解为两个步骤:接收用户提交的JSON数据,将JSON数据存储到文件中。
//接收用户提交的JSON数据
NSString *jsonString = ...;
NSError *error = nil;
//将NSString类型的JSON数据转化为NSDictionary类型
NSDictionary *comment = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&error];
if (error != nil) {
NSLog(@"解析失败:%@", error);
} else {
//将NSDictionary类型的评论信息转化为NSData类型
NSData *commentData = [NSJSONSerialization dataWithJSONObject:comment options:NSJSONWritingPrettyPrinted error:&error];
if (error != nil) {
NSLog(@"转化失败:%@", error);
} else {
//存储到文件中
NSString *documentPath = ...; //获取Document的路径
NSString *filePath = [documentPath stringByAppendingPathComponent:@"comment.json"];
BOOL succeed = [commentData writeToFile:filePath atomically:YES];
if (succeed) {
NSLog(@"存储成功");
} else {
NSLog(@"存储失败");
}
}
}
在这个示例中,我们首先使用NSJSONSerialization将用户提交的JSON数据转化为NSDictionary类型的评论数据。接着又使用NSJSONSerialization将NSDictionary类型的评论数据转化为NSData类型,并使用writeToFile方法将评论数据存储到文件中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Objective-C Json 实例详解 - Python技术站