Xcode4.4.1安装SBjson以及使用的相关方法

初学ios,现在涉及到json数据的问题,朋友说用SBjson比较方便和快捷,但是网上搜了好多写的都不全面和具体,今天记录下来折腾的这一下午,希望对新手有所帮助。


一:SBJSON

1,由于SBjson属于第三方类库,所以需要我们下载后导入到项目中。

  官方下载地址:https://github.com/stig/json-framework/downloads 

 官方文档(必看) http://stig.github.com/json-framework/api/3.0/index.html

                  介绍 http://stig.github.com/json-framework/


         2,将下载好的文件解压缩,然后在Xcode中File-Add File to "demo"....,将解压后的Classes文件夹添加到项目中来

(注意勾选上copy items..Folders选择第一个)

3,这个时候,项目下会多出一个Classes文件夹,点开后里面全是头文件。不管这些,在你的代码里(如ViewControler.h)#import "SBJSON.h" 注意名字不要错了。这个时候,就可以使用啦。

        4,项目中不用覆盖任何方法,相关的类直接拿来就可以使用。JSON类型数据解析成NSMutableDictionary

        5,把基本数据类型封装成Json类型。

[java]  view plain copy
  1. NSString *username = nameField.text;  
  2. NSString *password = passwordField.text;  
  3. NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] initWithObjectsAndKeys:username,@"username",password,@"password",nil];  
  4. --------SBJsonWriter----------------------------------  
  5. SBJsonWriter *writer = [[SBJsonWriter alloc] init];  
  6. NSLog(@"封装mutableDictionary:%@",[writer stringWithObject:userInfo]);  
输出结果:封装mutableDictionary:{"username":"wda345","password":"132213"}

6,记得多看一下官方的API哈。

SBJSon解析的类型有:
Null -> NSNull
String -> NSMutableString
Array -> NSMutableArray
Object -> NSMutableDictionary
Boolean -> NSNumber
Number -> NSDecimalNumber
如果是其他类型,如,NSDate,那么需要把此转为NSString来处理;NSDictionary,NSArray集合类的基项类型是NSString、NSNumber、NSNull。
传送门:

http://blog.csdn.net/remote_roamer/article/details/7021640

http://kevin1366204484.blog.163.com/blog/static/17196620820121304511302/

http://www.devdiv.com/forum.php?mod=viewthread&tid=122618

http://www.cnblogs.com/xiaodao/archive/2012/02/20/2359469.html



二,网络请求:NSURLConnection

待续....

太麻烦了,有空再研究:

http://hi.baidu.com/jt_one/item/8abdbcfe06d8e65dc9f337eb




三,ASIHTTPRequest 的使用方法

这是一个很火的第三方类库,实用,简单,方便,所以我也放弃了使用官方的 NSURLConnection,改用这个。

此类库下载地址: http://allseeing-i.com/ASIHTTPRequest/  详细功能方法请登录网站查询文档。


1,首先创建一个single View Applicaiton的项目模版,然后 File----add file to project...弹出的对话框选择解压出来的ASIHTTPRequest文件夹(打开全是.h文件),记得勾选destination选项。


成功添加后,在你的项目下会有一个以ASIHTTPRequest命名的文件夹,打开后全是.h类库

2,此时虽然在项目中导入"ASIHTTPRequest.h" 就能使用它,但是编译的时候会出错误,因为我们的项目还没有手机网络设置,手机服务等类库,这需要我们导入ios自带的类库。

一共需要:SystemConfiguration.framework, MobileCoreServices.framework,和libz.1.2.3.dylib这几个类库。

1. 选中项目
2. 选中目标
3. 跳转到“Build Phases”标签
4. 展开“Link Binary With Libraries”分组
5. 点击“+”添加类库如下图所示:
clip_image010
3,好了,大功告成,开始在你的.h文件下#import导入吧!


4,同步请求(httpPost)
这是ASIHTTPRequest最简单的一种使用模式,发送startSynchronous消息后即开始在同一线程中执行HTTP请求,线程将一直等待直到请求结束(请求成功或者失败)。通过检查error属性可以判断请求是否成功或者有错误发生。
要获取返回的文本信息,调用responseString方法。如果下载的是二进制文件,例如图片、MP3,则调用responseData方法,可以得到一个NSData对象。

这是我的一个点击button,校验密码的例子,大家注意:NSURL中的http:// 不要忘记了,否则即便没有错误,不会有任何提示。(ASIFormDataRequest类需要导入)
[java]  view plain copy
  1. //检查用户密码,服务器请求  
  2. - (IBAction)checkUserIdentity:(id)sender {  
  3.       
  4.     NSString *username = nameField.text;  
  5.     NSString *password = passwordField.text;  
  6.       
  7.     //ASIHTTPRequest  
  8.     NSURL *url = [NSURL URLWithString:@"http://192.168.1.4:6401/wap"];  
  9.     
  10. //  ASIHTTPRequest *request =[ASIHTTPRequest requestWithURL:url];//Httpget  
  11.     ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];//实例化一个Http Post类  
  12.     [request setPostValue:username forKey:@"username"]; //发送数据  
  13.     [request setPostValue:password forKey:@"password"]; //发送数据  
  14.     [request startSynchronous]; //执行同步请求  
  15.     NSError *error = [request error];  
  16.     //如果不错误,输出这些内容  
  17.     if(!error){  
  18.         NSString *res = [request responseString];  
  19.         NSLog(@"res:%@",res);  
  20.         SBJsonParser *parser = [[SBJsonParser alloc] init];  
  21.         NSError *errorNil = nil;  
  22.         NSMutableDictionary *dict = [parser objectWithString:res error:&errorNil];  
  23.   
  24.           
  25.         NSNumber *status = [dict objectForKey:@"status"];  
  26.         NSLog(@"status:%@",[dict objectForKey:@"status"]);  
  27.         NSLog(@"message:%@",[dict objectForKey:@"message"]);  
  28.           
  29.         if([status intValue] == 0){  
  30.             NSLog(@"此用户没有订购爱贝通业务!");  
  31.         }  
  32.         else{  
  33.             NSLog(@"info:%@",[dict objectForKey:@"message"]);  
  34.             NSLog(@"%d",NUMBER);  
  35.             NSURL *targetlist = [NSURL URLWithString:tartgetlistUrl];  
  36.             ASIHTTPRequest *get = [ASIHTTPRequest requestWithURL:targetlist];  
  37.             [get startSynchronous];  
  38.             NSError *tagetlistError= [get error];  
  39.             if(!tagetlistError){  
  40.                 NSLog(@"tagetList`s res:%@",[get responseString]);  
  41.                 [self performSegueWithIdentifier:@"second" sender:self];  
  42. //                [self.navigationController.navigationController]  
  43.                   
  44.               
  45.             }  
  46.               
  47.         }  
  48.           
  49.           
  50.     }  
  51.   
  52. }  
5,关于异步请求:
一般情况下,应该优先使用异步请求代替同步请求,当在主线程中使用ASIHTTPRequest同步请求,应用程序的界面会锁定,无法进行任何操作,直到请求完成。
[java]  view plain copy
  1. - (IBAction)grabURLInBackground:(id)sender  
  2. {  
  3. NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];  
  4. ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];  
  5. [request setDelegate:self];  
  6. [request startAsynchronous];  
  7. }  
  8. - (void)requestFinished:(ASIHTTPRequest *)request  
  9. {  
  10. // 当以文本形式读取返回内容时用这个方法  
  11. NSString *responseString = [request responseString];  
  12. // 当以二进制形式读取返回内容时用这个方法  
  13. NSData *responseData = [request responseData];  
  14. }  
  15. - (void)requestFailed:(ASIHTTPRequest *)request  
  16. {  
  17. NSError *error = [request error];  
  18. }  

传送门:


原文来自:http://blog.csdn.net/mad1989/article/details/7913359
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESJsonFormat-Xcode 将 JSON 格式化输出为模型的属性 写在之前的注意 JSON中的key对应的value为Null的话会格式化成NSString类型 格式化之前光标放在你需要添加属性的地方 RootClass需要自己手动创建,插件只负责RootClass里面的属性生成 生成的MJExtension 2.0框架中objectClassInArray方法(类方法) 怎么安装: 方式1:下载-Xcode打开-Command B-重启Xcode 方式2:通过Alcatraz安装,搜索ESJsonFormat 方式3:下载-解压plugin文件夹中zip到~/Library/Application Support/Developer/Shared/Xcode/Plug-ins-重启Xcode 怎么使用: Window-ESJsonFormat-输入Json-Enter OR 快捷键(Control Shift J)-输入JSON-Enter 功能说明: -0.1 通过JSON字符串生成对应属性 通过文件写入的方式生成到.m文件 支持输入嵌套模型名称 -0.2 支持Swift 修复JSON的value的值为Null的时候多出来的空行 修复BOOL类型值格式化失效问题 -0.3 支持生成MJExtension框架中objectClassInArray方法 修复数组嵌套多级,里面子数组不能格式化的Bug Alcatraz 支持 Alcatraz ,请搜索ESJsonFormat 效果: 简单模型 复杂模型 图中的JSON格式 {     "name": "王五",     "gender": "man",     "age": 15,     "height": "140cm", } {     "name": "王五",     "gender": "man",     "age": 15,     "height": "140cm",     "addr": {         "province": "fujian",         "city": "quanzhou",         "code": "300000" },     "hobby": [         {             "name": "billiards",             "code": "1" },         {             "name": "computerGame",             "code": "2" }     ]  } 计划实现: 将嵌套模型生成文件 其他: 如在使用过程中需要到问题,请你Issues我。 有什么好的想法也可以Issues我。 如果你半夜睡不着觉也可以Issues我。 Thanks:GsonFormat、VVDocumenter-Xcode、MJExtension 标签:ESJsonFormat

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值