IOS开发使用NSJSONSerialization、JSONKit、SBJson、TouchJson四种方式解析Json数据

概括:JSON数据解析可以使用苹果自带的NSJSONSerialization方式,也可以使用第三方框架,比如JSONKit、SBJson、TouchJSON等,框架的使用方式比较简单,但性能比ios原生方式差很多,建议使用原生方式。



1 NSJSONSerialization,IOS原生


/**

*  解析JSON数据

*/

-(void) analysisJSON{

// 获取URL

NSURL *url = [[NSURL alloc] initWithString:@"http://localhost:8070/MJServer/video"];

// 获取session的实例

NSURLSession *session = [NSURLSession sharedSession];

// 创建一个数据访问任务

NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

// 如果访问错误

if (error || data == nil) {

NSLog(@"网络繁忙,请稍后再试");

return;

}

// 解析JSON数据,预先知道json数据的结构

NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];

NSArray *videos = result[@"videos"];

for (NSDictionary *dict in videos) {

NSLog(@"videoID -- %@", dict[@"id"]);

NSLog(@"videoName -- %@", dict[@"name"]);

NSLog(@"videoURL -- %@", dict[@"url"]);

printf("\n----------------华丽丽的分割线-----------------\n");

}

}];

[task resume];

}

2 JSONKit,需要导入#import "JSONKit.h",并且要添加libz.dylib动态库


/**

*  JSONKit

*/

- (IBAction)jsonkit {

NSLog(@"jsonkit");

NSDictionary *weatherInfo = [[self weatherData] objectFromJSONData];

self.jsonData.text = [self weatherFormat:weatherInfo];

}

3 SBJson,需要导入#import "SBJson/SBJson.h"


/**

*  SBJson

*/

- (IBAction)sbjson {

NSLog(@"sbjson");

NSURL *url = [[NSURL alloc] initWithString:@"http://www.weather.com.cn/data/cityinfo/101010100.html"];

NSString *responseString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

// 创建SBJson分析对象

SBJsonParser *parser = [[SBJsonParser alloc] init];

// 从json数据中获取字典

NSDictionary *weatherInfo = [parser objectWithString:responseString];

self.jsonData.text = [self weatherFormat:weatherInfo];

}

4 TouchJson,需要导入#import "TouchJson/JSON/CJSONDeserializer.h"


/**

*  TouchJson

*/

- (IBAction)touchjson {

NSLog(@"touchjson");

NSDictionary *weatherInfo = [[CJSONDeserializer deserializer]deserialize:[self weatherData] error:nil];

self.jsonData.text = [self weatherFormat:weatherInfo];

}

2\3\4以天气信息为例,其数据获取方法及格式化方法如下


/**

*  获取天气信息

*

{

"weatherinfo": {

"city": "北京",

"cityid": "101010100",

"temp1": "12℃",

"temp2": "15℃",

"weather": "小雨",

"img1": "n7.gif",

"img2": "d7.gif",

"ptime": "18:00"

}

}

*  @return json数据

*/

-(NSData *)weatherData{

NSURL *url = [[NSURL alloc] initWithString:@"http://www.weather.com.cn/data/cityinfo/101010100.html"];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

NSDictionary *weather = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

NSLog(@"weather -- %@", weather[@"weatherinfo"]);

return data;

}

// 天气格式化

-(NSString *)weatherFormat:(NSDictionary *)weatherInfo{

NSDictionary *weather = weatherInfo[@"weatherinfo"];

NSString *city =weather[@"city"];

NSString *status =weather[@"weather"];

NSString *temp1 =weather[@"temp1"];

NSString *temp2 =weather[@"temp2"];

NSString *ptime =weather[@"ptime"];

return [NSString stringWithFormat:@"天气预报(%@发布)\n%@,%@,气温%@-%@", ptime, city, status, temp1, temp2];

}

时间: 2024-10-22 00:17:11

IOS开发使用NSJSONSerialization、JSONKit、SBJson、TouchJson四种方式解析Json数据的相关文章

IOS开发之——四种方法解析Jason数据(转)

本文将介绍TouchJson. SBJson .JSONKit 和 iOS5所支持的原生的json方法,解析国家气象局API,TouchJson和SBJson需要下载他们的库 TouchJson包下载: http://download.csdn.net/detail/enuola/4523169 SBJson 包下载: http://download.csdn.net/detail/enuola/4523177 JSONKit包下载:http://download.csdn.net/detail

IOS开发使用NSXMLParser、GDataXML两种方式解析XML数据

概括:XML数据解析方式有 *IOS原生的NSXMLParser,只支持SAX方式解析,使用简单 *C语言的libxml2,同时支持DOM和SAX方式解析 *google的GDataXML,只支持DOM方式解析,基于libxml2,使用时需要将编译环境配置为非ARC,并添加libxml2.dylib动态库 GDataXMLDocument 1 使用GDataXML的DOM方式解析XML,需要导入#import "GDataXMLNode.h" /** *  DOM方式解析XML数据 *

iOS开发——实用OC篇&定时器的几种方式

定时器的几种方式 在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 然而,在iOS中有很多方法完成以上的任务,到底有多少种方法呢?经过查阅资料,大概有三种方法:NSTimer.CADisplayLink.GCD.接下来我就一一介绍它们的用法. 一.NSTimer 1. 创建方法 1 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:s

【iOS开发系列】延时执行的几种方式

/* 本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. */ - (void)delayMethod { NSLog(@"execute"); } /** * [1].performSelector方法 */ [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f]; // 此方式要求必须在主线程中执行,否则无效. // 是一种非阻塞的执行方式, // 暂时未

python全栈开发【补充】单例模式的四种方式

一.什么是单例模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 二.优点 对唯一实例的受控访问 单利相当于全局变量,但防止了命名空间被污染 与单利模式功能相似的概念:全局变量.静态变量(方法) 试问?为什么用单例模式,不用全局变量呢? 答.全局变量可能会有名称空间的干扰,如果有重名的可能会被覆盖 三.使用场景 当类只有一个实例而且客户可以从一个众所周知的访问点访问它时 比如:数据库链接.Socket创建链接 四.单例模式的四种实现方式 # 1.模块导入的形式 s1.py class F

【iOS开发-73】创建控制器的3种方式、深入了解view的创建和加载顺序

(1)创建控制器的3种方式 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; [self.window makeKeyAndVisible]; //关于主窗口 //在iOS6之前,

【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系

(1)设置状态栏的2种方式 --第一种方式就是我们在控制器中设置,系统默认就是交给视图控制器去管理的,这样不同视图控制器可以自定义不同的状态栏如下: -(BOOL)prefersStatusBarHidden{ } -(UIStatusBarStyle)preferredStatusBarStyle{ } --如果我们需要交给UIApplication对象管理(iOS6之前就是),则需要如下设置: 先在info.plist中把默认的设置修改掉: 然后直接用如下代码即可: - (void)view

【iOS开发-图层】自定义图层的两种方式

想要自定义图层,只需要构建一个类继承CALayer方法 如果让自定义图层初始化上面就有画好的图形,有两种办法 重写drawInContext方法 自定义的图层下面的方法,然后必须自定义的图层对象显示调用 [layer setNeedsDisplay]然后才会调用这个方法; 自定图层文件 - (void)drawInContext:(CGContextRef)ctx { CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);//设置红色 CGContextAddEll

java 多线程实现四种方式解析Thread,Runnable,Callable,ServiceExcutor,Synchronized ,ReentrantLock

1.Thread实现: import java.util.Date; import java.text.SimpleDateFormat; public class MyThread extends Thread{ @Override public void run(){ SimpleDateFormat strf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 String d = strf.format(new Date