首页 > 代码库 > ios 中使用SBJson拼接和解析json

ios 中使用SBJson拼接和解析json

1.ios解析json 
使用开源json包,项目地址: 
     http://stig.github.com/json-framework/ 
NSData * responseData = http://www.mamicode.com/[respones responseData]; 
      
     NSString * strResponser = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
SBJsonParser * parser = [[SBJsonParser alloc]init]; 
     NSMutableDictionary *dicMessageInfo = [parser objectWithString:strResponser]; // 解析成json解析对象 
[parser release]; 
     //发送者 
     NSString * sender = [dicMessageInfo objectForKey:@"sender"]; 

2.json嵌套对象解析: 
//要上传的字符串 
    NSString *dataStr=[[NSString alloc] initWithString:@"{\"cross\":{\"1\":\"true\",\"2\":\"false\",\"3\":\"true\"}}"]; 
//获取响应返回字符串 
NSData * responseData = http://www.mamicode.com/[respones responseData]; 
        
        NSString * strResponser = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
//嵌套解析 
SBJsonParser * parser = [[SBJsonParser alloc]init]; 
            
            NSMutableDictionary *dicMessageInfo = [parser objectWithString:strResponser]; // 解析成json解析对象 
            
            NSMutableDictionary * cross = [dicMessageInfo objectForKey:@"cross"]; 
            
            NSString *cross1= [cross objectForKey:@"1"]; 
            //解析json到各个字符串 
            //发送者 
            [parser release]; 
            NSLog(@"cross1: %@",cross1); 
3.拼接json字符串 

通过使用SBJson中的SBJsonWriter类的方法- (NSString*)stringWithObject:(id)value可以将一个对象中的值格式化为json字符串,符合key/value格式的数据封装到NSDictionary后可以使用该方法进行格式化,其他数据通过拼接字符串的方式格式化。 
在拼接过程中可以使用类NSMutableString的方法: 
- (void)appendString:(NSString *)aString;、 
- (void)appendFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2); 
动态添加字符串。 
拼接的字符串可通过json在线验证的方式验证其格式是否正确,网址为: 
http://jsonlint.com/ 
-(NSString *) getJsonString 
{ 
    NSMutableString *json = [NSMutableString stringWithCapacity:128]; 
    NSString *jsonString=nil; 
    SBJsonWriter *writer = [[SBJsonWriter alloc] init]; 
    [json appendString:@"{\"data\":{"]; 
    [json appendFormat:@"\"%@\":\"%d\",",@"reset",reset]; 
    if(missionStatus!=NULL) 
    { 
        jsonString=[writer stringWithObject:status]; 
        if(jsonString!=NULL) 
        { 
            [json appendString:@"\"status\":"]; 
            [json appendString:jsonString]; 
        } 
    } 
    [json appendString:@"}}"]; 
    return json; 
} 
4.利用多个NSDictionary,拼接多层嵌套的json字符串,减少因手工拼接忘记加引号导致的json格式错误 
示例代码: 
NSDictionary *dataDictionary= [NSDictionary dictionaryWithObjectsAndKeys:mac,@"mac", 
                                   game,@"game", 
                                   devicetoken,@"devicetoken", 
                                   device,@"device", 
                                   gv,@"gv", 
                                   lang,@"lang", 
                                   os,@"os", 
                                   hardware,@"hardware", 
                                   down,@"down",nil]; 
    NSDictionary *parmDictionary= [NSDictionary dictionaryWithObjectsAndKeys:@"getSession",@"act", 
                                   dataDictionary,@"data",nil]; 
    NSDictionary *jsonDictionary=[NSDictionary dictionaryWithObjectsAndKeys:pv,@"pv", 
                                  parmDictionary,@"param",nil]; 
    SBJsonWriter *writer = [[SBJsonWriter alloc] init]; 
    
    NSString *jsonString=nil; 
    jsonString=[writer stringWithObject:jsonDictionary]; 
    NSLog(@"%@",jsonString); 
5.json字符串在线校验网址: 
http://jsonlint.com/