sbjson的解析

1,访问 SBJson的项目官网,并且下载 https://github.com/stig/json-framework/downloads

    注意:按照作者的说明,

SBJson v3.1alpha3 - source and API docs for Mac and iOS development, now with ARC support!

只有在3.1的版本上,才支持xcode 4.2中开启ARC的功能。所以我使用这个版本。


2.依然采用源代码编译的方式。把SBJson下载后解开的 目录中的classes目录拖拉到 项目中。

3.在项目的h文件中引入#import "SBJson.h"。不再使用#import "JSON.h"

4.测试用的json字符串是: {"userInfo":{"userName":"徐泽宇","sex":"男"}}

5.测试代码是 :

[cpp]  view plain copy
  1. //测试json的解析  
  2. -(void)testJsonParser: (NSString *) jsonString  
  3. {  
  4.     jsonString = [[NSString alloc] initWithString:@"{\"userInfo\":{\"userName\":\"徐泽宇\",\"sex\":\"男\"}}"];  
  5.     NSLog(@"正在解析json字符串是:%@",jsonString);  
  6.       
  7.     SBJsonParser * parser = [[SBJsonParser alloc] init];  
  8.     NSError * error = nil;  
  9.     NSMutableDictionary *jsonDic = [parser objectWithString:jsonString error:&error];  
  10.     NSMutableDictionary * dicUserInfo = [jsonDic objectForKey:@"userInfo"];  
  11.       
  12.     NSLog(@"%@",[jsonDic objectForKey:@"userInfo" ]);  
  13.     NSLog(@"%@",[dicUserInfo objectForKey:@"userName"]);  
  14.     NSLog(@"%@",[dicUserInfo objectForKey:@"sex"]);  
  15. }  


控制台打印的内容如下:

2011-11-29 02:56:04.882 IManager[4040:fb03] {
    sex = "\U7537";
    userName = "\U5f90\U6cfd\U5b87";
}
2011-11-29 02:56:04.887 IManager[4040:fb03] 徐泽宇
2011-11-29 02:56:04.888 IManager[4040:fb03] 男


注意:这里的json的字符串。一定要用双引号,不能使用单引号。这点上和java的类包是有区别的。这个问题浪费了我1个小时。



处理json对象有多个记录的方法。

json字符串是:

{"customer":[{"name":"roamer","ycount":"232.4","sumcount":"322.3"},{"name":"王三","ycount":"221.2","sumcount":"1123.2"},{"name":"李四","ycount":"1221.2","sumcount":"12123.2"}]}


[cpp]  view plain copy
  1. +(void) test{  
  2.     DLog(@"test 开始运行");  
  3.     NSString * customerGridJsonString = [[NSString alloc]initWithString:@"{\"customer\":[{\"name\":\"roamer\",\"ycount\":\"232.4\",\"sumcount\":\"322.3\"},{\"name\":\"王三\",\"ycount\":\"221.2\",\"sumcount\":\"1123.2\"},{\"name\":\"李四\",\"ycount\":\"1221.2\",\"sumcount\":\"12123.2\"}]}"];  
  4.   
  5.     SBJsonParser * parser = [[SBJsonParser alloc] init];  
  6.     DLog(@"%@",customerGridJsonString);  
  7.     NSError * error = nil;  
  8.       
  9.     NSMutableDictionary *root = [[NSMutableDictionary alloc] initWithDictionary:[parser objectWithString:customerGridJsonString error:&error]];  
  10.     //注意转换代码  
  11.     SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init];  
  12.       
  13.     NSString *jsonString = [jsonWriter stringWithObject:root];    
  14.       
  15.     [jsonWriter release];  
  16.     DLog(@"%@",jsonString);  
  17.     //注意转换代码  
  18.     NSMutableArray * customers = [root objectForKey:@"customer"];  
  19.     DLog(@"%@",customers);  
  20.     for(NSMutableDictionary * member  in customers)  
  21.     {  
  22.         DLog(@"%@",[[member objectForKey:@"name"] description]);  
  23.     }  
  24.   
  25. }  



控制台输出是:

2012-04-22 13:55:41.845 iQuestionnaire[13464:fb03] test 开始运行

2012-04-22 13:55:41.846 iQuestionnaire[13464:fb03] {"customer":[{"name":"roamer","ycount":"232.4","sumcount":"322.3"},{"name":"王三","ycount":"221.2","sumcount":"1123.2"},{"name":"李四","ycount":"1221.2","sumcount":"12123.2"}]}


2012-04-22 13:55:41.854 iQuestionnaire[13464:fb03] {"customer":[{"sumcount":"322.3","name":"roamer","ycount":"232.4"},{"sumcount":"1123.2","name":"王三","ycount":"221.2"},{"sumcount":"12123.2","name":"李四","ycount":"1221.2"}]}

[

2012-04-22 13:55:41.854 iQuestionnaire[13464:fb03] (

        {

        name = roamer;

        sumcount = "322.3";

        ycount = "232.4";

    },

        {

        name = "\U738b\U4e09";

        sumcount = "1123.2";

        ycount = "221.2";

    },

        {

        name = "\U674e\U56db";

        sumcount = "12123.2";

        ycount = "1221.2";

    }

)


2012-04-22 13:55:41.854 iQuestionnaire[13464:fb03] roamer


2012-04-22 13:55:41.856 iQuestionnaire[13464:fb03] 王三


2012-04-22 13:55:41.856 iQuestionnaire[13464:fb03] 李四



注意这里的转换代码: 如果直接使用 

NSMutableDictionary *root  来获得 字符串,将会对json字串产生以下变化

1. 中文问题

2.加入了()符号

3.所有的: 变成了 =

要避免这个问题的产生,需要用

   SBJsonWriter *jsonWriter = [[SBJsonWriter allocinit];

    

    NSString *jsonString = [jsonWriter stringWithObject:root];  

    

    [jsonWriter release];


这段代码来把 NSMutableDictionary 转成 NSString

你可能感兴趣的:(sbjson的解析)