JSON 数据的4中解析方式比较

系统 1449 0

作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式。

有的json代码格式比较混乱,可以使用此“ http://www.bejson.com/ ”网站来进行JSON格式化校验( 点击打开链接 )。此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便。
从IOS5开始,APPLE提供了对json的原生支持( NSJSONSerialization ),但是为了兼容以前的ios版本,可以使用第三方库来解析Json。
本文将介绍 TouchJSON、 SBJson 、JSONKit 和 iOS5所支持的原生的json方法 ,解析国家气象局API。

国家气象局提供的天气预报接口
接口地址有三个:
http://www. weather.com.cn/data/sk/101010100.html
http://www. weather.com.cn/data/cityinfo/101010100.html
http://m. weather.com.cn/data/101010100.html
第三接口信息较为详细,提供的是6天的天气,关于API所返回的信息请见 开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供) ,全国各城市对应这一个id号,根据改变id好我们就可以解析出来各个城市对应天气;

使用Cocoapods 将 TouchJSON、 SBJson 、JSONKit  第三方的框架加入到项目中:

JSON 数据的4中解析方式比较
 

相关代码如下:  

 

      
#import "ViewController.h"
#import <SBJson/SBJson.h>
#import <TouchJSON/CJSONDeserializer.h>
#import <JSONKit/JSONKit.h>

@interface ViewController ()

@end

@implementation ViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

//TouchJSON解析json,性能最差
- (IBAction)touchJSON:(id)sender {
    //天气预报的url
    NSURL *url = [NSURL URLWithString:@"http://m.weather.com.cn/data/101010100.html"];
    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"];    self.weatherMessage.text = [NSString stringWithFormat:@"今天是%@ %@ %@ 的天气状况是:%@ %@",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"],[weatherInfo objectForKey:@"weather1"],[weatherInfo objectForKey:@"temp1"]];

     }

   * //SBJson解析json,性能倒二
- (IBAction)SBJson:(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];
    NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"];

     self.weatherMessage.text = [NSString stringWithFormat:@"今天是%@ %@ %@ 的天气状况是:%@ %@",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"],[weatherInfo objectForKey:@"weather1"],[weatherInfo objectForKey:@"temp1"]];

}

//JSONKit解析json,性能第二,与iosJSON相当
- (IBAction)JSONKit:(id)sender {
    NSURL *url = [NSURL URLWithString:@"http://m.weather.com.cn/data/101180801.html"];
    NSError *error = nil;
    NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
    JSONDecoder *decoder = [[JSONDecoder alloc] initWithParseOptions:JKSerializeOptionNone];
    id result = [decoder objectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
    if ([result isKindOfClass:[NSDictionary class]]) {
        NSDictionary *rootDic = (NSDictionary *)result;
        NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"];

        self.weatherMessage.text = [NSString stringWithFormat:@"今天是%@ %@ %@ 的天气状况是:%@ %@",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"],[weatherInfo objectForKey:@"weather1"],[weatherInfo objectForKey:@"temp1"]];

    }
}

//ios5 自带的JSON器解析json,性能最优
- (IBAction)iosJSON:(id)sender {
    NSURL *url = [NSURL URLWithString:@"http://m.weather.com.cn/data/101180601.html"];
    NSError *error = nil;
    NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

    id result = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableLeaves error:&error];
    if ([result isKindOfClass:[NSDictionary class]]) {
        NSDictionary *rootDic = (NSDictionary *)result;
        NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"];

        self.weatherMessage.text = [NSString stringWithFormat:@"今天是%@ %@ %@ 的天气状况是:%@ %@",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"],[weatherInfo objectForKey:@"weather1"],[weatherInfo objectForKey:@"temp1"]];
    }
}

@end

    

 

 

JSON 数据的4中解析方式比较


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论