iOS四种方法解析Jason数据

(1)使用TouchJSon解析方法:(需导入包:#import TouchJson/JSON/CJSONDeserializer.h)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//使用TouchJson来解析北京的天气
- (IBAction)btnPressTouchJson:(id)sender {
     //获取API接口
     NSURL *url = [NSURL URLWithString: @http : //m.weather.com.cn/data/101010100.html];
     //定义一个NSError对象,用于捕获错误信息
     NSError *error;
     NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
     NSLog( @jsonString --->%@,jsonString);
     //将解析得到的内容存放字典中,编码格式为UTF8,防止取值的时候发生乱码
     NSDictionary *rootDic = [[CJSONDeserializer deserializer] deserialize:[jsonString dataUsingEncoding:NSUTF8StringEncoding] error:&error];
     //因为返回的Json文件有两层,去第二层内容放到字典中去
     NSDictionary *weatherInfo = [rootDic objectForKey: @weatherinfo ];
     NSLog( @weatherInfo --->%@,weatherInfo);
     //取值打印
     txtView.text = [NSString stringWithFormat:@今天是 %@  %@  %@  的天气状况是:%@  %@ ,[weatherInfo objectForKey: @date_y ]
                   ,[weatherInfo objectForKey: @week ],[weatherInfo objectForKey: @city ],[weatherInfo objectForKey: @weather1 ]
                   ,[weatherInfo objectForKey: @temp1 ]];
}
(2)使用 SBJson 解析方法:(需导入包:#import SBJson/SBJson.h)
?
1
2
3
4
5
6
7
8
9
10
11
12
13
//使用SBJson解析南阳的天气
- (IBAction)btnPressSBJson:(id)sender {
     NSURL *url = [NSURL URLWithString: @http : //m.weather.com.cn/data/101180701.html];
     NSError *error = nil;
     NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
     SBJsonParser *parser = [[SBJsonParser alloc] init];
     
     NSDictionary *rootDic = [parser objectWithString:jsonString error:&error];
     NSDictionary *weatherInfo = [rootDic objectForKey: @weatherinfo ];
     txtView.text = [NSString stringWithFormat:@今天是 %@  %@  %@  的天气状况是:%@  %@ ,[weatherInfo objectForKey: @date_y ]
                   ,[weatherInfo objectForKey: @week ],[weatherInfo objectForKey: @city ],[weatherInfo objectForKey: @weather1 ]
                   ,[weatherInfo objectForKey: @temp1 ]];
}
(3)使用 IOS5自带解析类NSJSONSerialization 方法解析:(无需导入包,IOS5支持,低版本IOS不支持)
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (IBAction)btnPressIOS5Json:(id)sender {
     
     NSError *error;
     //加载一个NSURL对象
     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString: @http : //m.weather.com.cn/data/101180601.html]];
     //将请求的url数据放到NSData对象中
     NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
     //IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
     NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];
     NSDictionary *weatherInfo = [weatherDic objectForKey: @weatherinfo ];
     txtView.text = [NSString stringWithFormat:@今天是 %@  %@  %@  的天气状况是:%@  %@ ,[weatherInfo objectForKey: @date_y ]
                   ,[weatherInfo objectForKey: @week ],[weatherInfo objectForKey: @city ],[weatherInfo objectForKey: @weather1 ]
                   ,[weatherInfo objectForKey: @temp1 ]];
     NSLog( @weatherInfo 字典里面的内容为--》%@, weatherDic );
}
(4)使用 JSONKit 的解析方法:(需导入包:#import JSONKit/JSONKit.h)

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- ( void )btnPressJsonKit:(id)sender {
     
     //如果json是“单层”的,即value都是字符串、数字,可以使用objectFromJSONString
     NSString *json1 = @{a: 123 , :abc};
     NSLog( @json1 :%@,json1);
     NSDictionary *data1 = [json1 objectFromJSONString];
     NSLog( @json1 .a:%@,[data1 objectForKey: @a ]);
     NSLog( @json1 .b:%@,[data1 objectForKey: @b ]);
     [json1 release];
     
     //如果json有嵌套,即value里有array、object,如果再使用objectFromJSONString,程序可能会报错
     //(测试结果表明:使用由网络或得到的php/json_encode生成的json时会报错,但使用NSString定义的json字符串时,解析成功),最好使用objectFromJSONStringWithParseOptions:
     NSString *json2 = @{a: 123 , :abc, c:[ 456 , hello], d:{
ame:张三, age:}};
     NSLog( @json2 :%@, json2);
     NSDictionary *data2 = [json2 objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];
     NSLog( @json2 .c:%@, [data2 objectForKey: @c ]);
     NSLog( @json2 .d:%@, [data2 objectForKey: @d ]);
     [json2 release];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值