以下是关于“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\", \"0981\"]}";
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对象。最后,我们使用[]
操作符访问字典中的键值和数组中的元素。
示例3:使用Swift解析JSON数据
以下是一个示例代码,演示如何使用Swift解析JSON数据:
let jsonString = "{\"name\": \"John\", \"age\": 30}"
let jsonData = jsonString.data(using: .utf8)!
do {
let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: [])
if let jsonDictionary = jsonObject as? [String: Any] {
let name = jsonDictionary["name"] as? String
let age = jsonDictionary["age"] as? Int
print("name: \(name ?? ""), age: \(age ?? 0)")
}
} catch {
print("JSON解析失败:\(error)")
}
在上面的代码中,我们首先创建了一个JSON字符串,然后使用JSONSerialization
类将其转换为Foundation对象。最后,我们使用[]
操作符访问字典的键值对。
总结:
- 可以使用
NSSerialization
类将JSON数据转换为Foundation对象。 - 可以使用Objective-C语言访问JSON数据。
- 可以析简单的JSON数据和的JSON数据。
示例4:使用Swift解析JSON数组
以下是一个示例代码,演示如何使用Swift解析JSON数组:
let jsonString = "[{\"name\": \"John\", \"age\": 30}, {\"name\": \"Mary\", \"age\": 25}]"
let jsonData = jsonString.data(using: .utf8)!
do {
let jsonArray = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [[String: Any]]
for jsonDictionary in jsonArray ?? [] {
let name = jsonDictionary["name"] as? String
let age = jsonDictionary["age"] as? Int
print("name: \(name ?? ""), age: \(age ?? 0)")
}
} catch {
print("JSON解析失败:\(error)")
}
在上面的代码中,我们首先创建了一个JSON数组字符串,然后使用JSONSerialization
类将其转换为Foundation对象。最后,我们使用[]
操作符访问字典的键值对。
总结:
- 可以使用
JSONSerialization
类将JSON数据转换为Foundation对象。 - 可以使用Swift语言访问JSON数据。
- 可以解析简单的JSON数据和的JSON数据。
- 可以解析JSON数组。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ios基础篇(二十七)——json解析 - Python技术站