zoukankan      html  css  js  c++  java
  • ios 中使用SBJson拼接和解析json

    1.ios解析json
    使用开源json包,项目地址:
         http://stig.github.com/json-framework/
    NSData * responseData = [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 = [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/

  • 相关阅读:
    【BZOJ】1552/3506 [Cerc2007]robotic sort
    【BZOJ】1014 [JSOI2008]火星人prefix
    【BZOJ】1500: [NOI2005]维修数列
    【51NOD-0】1046 A^B Mod C
    【51NOD-0】1019 逆序数
    【51NOD-0】1018 排序
    【51NOD-0】1012 最小公倍数LCM
    The Grove(poj 3182)
    Iahub and Permutations(codeforces 314c)
    多边形之战(bzoj 2927)
  • 原文地址:https://www.cnblogs.com/lovewx/p/4283035.html
Copyright © 2011-2022 走看看