以下是关于“iOS基础篇(二十七)——JSON解析”的完整攻略:
什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和生成。JSON数据格式是一种键值对的数据结构,可以表示数字、字符串、布尔值、数组和对象等数据类型。
JSON解析
在iOS中,可以使用NSJSONSerialization
类将JSON数据转换为Foundation对象。以下是一个示例代码,演示如何将JSON数据转换为Foundation对象:
NSError *error = nil;
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (error) {
NSLog(@"JSON解析失败:%@", error);
} else {
if ([jsonObject isKindOfClass:[NSDictionary class]]) {
NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
// 处理字典类型的JSON数据
} else if ([jsonObject isKindOfClass:[NSArray class]]) {
NSArray *jsonArray = (NSArray *)jsonObject;
// 处理数组类型的JSON数据
}
}
在上面的代码中,我们首先将JSON字符串转换为NSData对象,后使用NSJSONSerialization
类将NSData对象转换为Foundation对象。如果转换失败,会输出错误信息;如果转换成功,会根据Foundation对象的类型进行相应的处理。
访问JSON数据
一旦将JSON数据转换为Foundation对象,就可以使用Objective-C语言访问JSON数据。以下是一个示例代码,演示如何访问JSON数据:
NSDictionary *jsonDictionary = @{@"name": @"John", @"age": @30};
NSString *name = jsonDictionary[@"name"];
NSNumber *age = jsonDictionary[@"age"];
NSLog(@"name: %@, age: %@", name, age);
在上面的代码中,我们首先创建了一个字典类型的JSON数据,然后使用[]
操作符访问字典中的键值对。
示例1:解析简单的JSON数据
以下是一个示例代码,演示如何解析简单的JSON数据:
NSString *jsonString = @"{\"name\": \"John\", \"age\": 30}";
NSError *error = nil;
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (error) {
NSLog(@"JSON解析失败:%@", error);
} else {
if ([jsonObject isKindOfClass:[NSDictionary class]]) {
NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
NSString *name = jsonDictionary[@"name"];
NSNumber *age = jsonDictionary[@"age"];
NSLog(@"name: %@, age: %@", name, age);
}
}
在上面的代码中,我们首先创建了一个JSON字符串,然后使用NSJSONSerialization
类将其转换为Foundation对象。最后,我们使用[]
操作符访问字典中的键值对。
示例2:解析复杂的JSON数据
以下是一个示例代码,演示如何解析复杂的JSON数据:
NSString *jsonString = @"{\"name\": \"John\", \"age\": 30, \"address\": {\"city\": \"New York\", \"state\": \"NY\"}, \"phones\": [\"1234567890\", \"0987654321\"]}";
NSError *error = nil;
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if (error) {
NSLog(@"JSON解析失败:%@", error);
} else {
if ([jsonObject isKindOfClass:[NSDictionary class]]) {
NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
NSString *name = jsonDictionary[@"name"];
NSNumber *age = jsonDictionary[@"age"];
NSDictionary *address = jsonDictionary[@"address"];
NSString *city = address[@"city"];
NSString *state = address[@"state"];
NSArray *phones = jsonDictionary[@"phones"];
NSLog(@"name: %@, age: %@, city: %@, state: %@, phones: %@", name, age, city, state, phones);
}
}
在上面的代码中,我们首先创建了一个复的JSON字符串,然后使用NSJSONSerialization
类将其转换为Foundation对象。最后,我们使用[]
操作符访问字典中的键值对和数组中的元素。
总结:
- 可以使用
NSSerialization
类将JSON数据转换为Foundation对象。 - 可以使用Objective-C语言访问JSON数据。
- 可以解析简单的JSON数据和复的JSON数据。