iOS开发中的JSON数据
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在iOS开发中常用于前后端交互、接口请求等方面。在iOS开发中,我们可以使用系统提供的NSJSONSerialization类实现对JSON格式数据的生成和解析。
JSON数据的生成
我们可以使用Foundation框架中的NSJSONSerialization类生成JSON格式数据。生成JSON格式数据的方法是将需要序列化(序列化即将内容组成一个串作为输出)的OC对象序列化为NSData对象。
具体实现如下:
NSError *error = nil;
NSDictionary *dict = @{@"name": @"Tom", @"age": @18, @"city": @"Beijing"};
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
以上代码将一个NSDictionary对象序列化成了一个JSON格式的NSData对象,并将NSData对象转成了NSString对象,最终得到了一个JSON格式的字符串。其中,NSDictionary对象表示生成JSON格式数据的源数据,options参数用于设置生成JSON格式数据时的选项,error参数用于存储序列化错误时的信息。
JSON数据的解析
我们可以使用Foundation框架中的NSJSONSerialization类解析JSON格式数据。解析JSON格式数据的方法是将JSON格式数据转化为OC对象。
具体实现如下:
NSError *error = nil;
NSString *jsonString = @"{\"name\":\"Tom\",\"age\":18,\"city\":\"Beijing\"}";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id object = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if ([object isKindOfClass:[NSDictionary class]]) {
NSDictionary *resultDic = (NSDictionary *)object;
NSLog(@"name:%@\n age:%@\n city:%@", resultDic[@"name"], resultDic[@"age"], resultDic[@"city"]);
}
以上代码将一个JSON格式的字符串解析成了一个NSDictionary对象,最后打印出了NSDictionary对象中的内容。其中,jsonData表示需要解析的JSON格式数据,options参数用于设置解析JSON格式数据时的选项,error参数用于存储序列化错误时的信息。
示例1
假设我们需要生成一个包含学生姓名、年龄、籍贯、爱好的JSON格式数据。具体代码如下:
NSError *error = nil;
NSDictionary *stuDict = @{@"name": @"Mike", @"age": @20, @"hometown": @"Shanghai", @"hobby":@[@"reading", @"swimming", @"music"]};
NSData *data = [NSJSONSerialization dataWithJSONObject:stuDict options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
以上代码将一个NSDictionary对象序列化成了一个JSON格式的NSData对象,并将NSData对象转成了NSString对象,最终得到了一个JSON格式的字符串。其中,stuDict是学生信息的字典对象。
示例2
假设我们需要解析服务器返回的JSON格式数据,并在应用中展示。服务器返回的JSON格式数据如下:
{
"code": 200,
"message": "OK",
"data": {
"totalCount": 100,
"resultList": [{
"name": "Tom",
"age": 18,
"city": "Beijing"
},
{
"name": "Mike",
"age": 20,
"city": "Shanghai"
}]
}
}
我们需要解析服务器返回的JSON格式数据,并展示到应用界面上。具体代码如下:
NSError *error = nil;
NSString *jsonString = @"{\"code\":200,\"message\":\"OK\",\"data\":{\"totalCount\":100,\"resultList\":[{\"name\":\"Tom\",\"age\":18,\"city\":\"Beijing\"},{\"name\":\"Mike\",\"age\":20,\"city\":\"Shanghai\"}]}}";
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id object = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if ([object isKindOfClass:[NSDictionary class]]) {
NSDictionary *resultDict = (NSDictionary *)object;
NSArray *resultList = resultDict[@"data"][@"resultList"];
NSLog(@"totalCount:%@", resultDict[@"data"][@"totalCount"]);
for (NSDictionary *dict in resultList) {
NSLog(@"name:%@\n age:%@\n city:%@", dict[@"name"], dict[@"age"], dict[@"city"]);
}
}
以上代码将一个JSON格式的字符串解析成了一个NSDictionary对象,并打印出了NSDictionary对象中的内容。其中,jsonString表示需要解析的JSON格式数据。resultList是一个数组,里面包含多个字典对象,每个字典对象表示一条信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:谈谈iOS开发之JSON格式数据的生成与解析 - Python技术站