IOS开发之把 JSON 数据转化成 Arrays 或者 Dictionaries
1 前言
通过 NSJSONSerialization 这个类的 JSONObjectWithData:options:error:方法来实现,把JSON 数据解析出来放在数据或者字典里面保存。
2 代码示例
TestDemo.m
[plain]
-(void)convseFromJson{
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setValue:@"Anthony" forKey:@"First Name"];
[dictionary setValue:@"Robbins" forKey:@"Last Name"];
[dictionary setValue:[NSNumber numberWithUnsignedInteger:51] forKey:@"Age"];
NSArray *arrayOfAnthonysChildren = [[NSArray alloc] initWithObjects:
@"Anthony's Son 1",
@"Anthony's Daughter 1",
@"Anthony's Son 2",
@"Anthony's Son 3",
@"Anthony's Daughter 2", nil];
[dictionary setValue:arrayOfAnthonysChildren forKey:@"children"];
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization
dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];
if ([jsonData length] > 0 && error == nil){
NSLog(@"Successfully serialized the dictionary into data.");
/* Json转数组/字典 */
error = nil;
//转换方法
id jsonObject = [NSJSONSerialization
JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments
error:&error];
if (jsonObject != nil && error == nil){
NSLog(@"Successfully deserialized...");
//如果jsonObject是字典类
if ([jsonObject isKindOfClass:[NSDictionary class]]){
NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject;
NSLog(@"Dersialized JSON Dictionary = %@", deserializedDictionary);
}
//如果jsonObject是数组类
else if ([jsonObject isKindOfClass:[NSArray class]]){
NSArray *deserializedArray = (NSArray *)jsonObject;
NSLog(@"Dersialized JSON Array = %@", deserializedArray);
} else {
NSLog(@"I can't deal with it");
}
}
else if (error != nil){
NSLog(@"An error happened while deserializing the JSON data."); }
}
else if ([jsonData length] == 0 &&error == nil){
NSLog(@"No data was returned after serialization.");
}
else if (error != nil){
NSLog(@"An error happened = %@", error);
}
}
-(void)convseFromJson{
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setValue:@"Anthony" forKey:@"First Name"];
[dictionary setValue:@"Robbins" forKey:@"Last Name"];
[dictionary setValue:[NSNumber numberWithUnsignedInteger:51] forKey:@"Age"];
NSArray *arrayOfAnthonysChildren = [[NSArray alloc] initWithObjects:
@"Anthony's Son 1",
@"Anthony's Daughter 1",
@"Anthony's Son 2",
@"Anthony's Son 3",
@"Anthony's Daughter 2", nil];
[dictionary setValue:arrayOfAnthonysChildren forKey:@"children"];
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization
dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];
if ([jsonData length] > 0 && error == nil){
NSLog(@"Successfully serialized the dictionary into data.");
/* Json转数组/字典 */
error = nil;
//转换方法
id jsonObject = [NSJSONSerialization
JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments
error:&error];
if (jsonObject != nil && error == nil){
NSLog(@"Successfully deserialized...");
//如果jsonObject是字典类
if ([jsonObject isKindOfClass:[NSDictionary class]]){
NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject;
NSLog(@"Dersialized JSON Dictionary = %@", deserializedDictionary);
}
//如果jsonObject是数组类
else if ([jsonObject isKindOfClass:[NSArray class]]){
NSArray *deserializedArray = (NSArray *)jsonObject;
NSLog(@"Dersialized JSON Array = %@", deserializedArray);
} else {
NSLog(@"I can't deal with it");
}
}
else if (error != nil){
NSLog(@"An error happened while deserializing the JSON data."); }
}
else if ([jsonData length] == 0 &&error == nil){
NSLog(@"No data was returned after serialization.");
}
else if (error != nil){
NSLog(@"An error happened = %@", error);
}
}
控制台结果
2013-05-13 17:26:15.726 FromJsonTest[4944:303] Successfully serialized the dictionary into data.
2013-05-13 17:26:15.728 FromJsonTest[4944:303] Successfully deserialized...
2013-05-13 17:26:15.728 FromJsonTest[4944:303] Dersialized JSON Dictionary = {
Age = 51;
"First Name" = Anthony;
"Last Name" = Robbins;
children = (
"Anthony's Son 1",
"Anthony's Daughter 1",
"Anthony's Son 2",
"Anthony's Son 3",
"Anthony's Daughter 2"
);
最新文章
- TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析
- UVa #11582 Colossal Fibonacci Numbers!
- .net windows 服务创建、安装、卸载和调试
- float浮动与清除浮动
- [ES6] 14. Generator -- 1. yield &; next()
- phpcms v9和discuz X3.1实现同步登陆退出论坛(已实现)
- ASP FSO操作文件(复制文件、重命名文件、删除文件、替换字符串)
- java遍历hashMap、hashSet、Hashtable
- orale 查询每年、每月、每日统计量的sql语句
- value toDF is not a member of org.apache.spark.rdd.RDD
- html-简单的简历表制作
- 第七篇-列表式App:ListActivity及ListView
- My strength (C-A-R)
- 从一个点的长度是多少说起(Talking started from the length of a point on the real number line)
- python 翻转棋(othello)
- 设计模式之初识IoC/DI(六)
- 大话FLASH和EEPROM
- [vue]vue-book
- Thinkphp整合各个功能
- Google的跨平台开发高质量原生 UI 的移动 SDK---Flutter免费且开源
热门文章
- margin隐藏最后的切割线
- [Ramda] Convert a QueryString to an Object using Function Composition in Ramda
- 【codeforces 755A】PolandBall and Hypothesis
- js进阶 10-6 jquery中的属性选择器有哪些
- [Angular] Using the platform agnostic Renderer &; ElementRef
- WatchDog工作原理
- WPF 针对数据源某个属性进行排序
- 【BZOJ 1017】 [JSOI2008]魔兽地图DotR
- 【codeforces 779A】Pupils Redistribution
- Linux 增值服务中删除,自己主动和国家执行