亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

簡介Objective-C解析XML與JSON數據格式的方法

2020-07-26 03:29:02
字體:
來源:轉載
供稿:網友

解析XML
本文以解析本地XML為例,網絡獲取到的返回值只需轉換成NSData型,解析是同理

需要解析的xml文件如下,users.xml

<?xml version="1.0" encoding="UTF-8"?><AllUsers> <message>用戶信息</message> <user>  <name>芳仔小腳印</name>  <age>10</age>  <school>JiangSu University</school> </user> <user>  <name>毒蟲</name>  <age>22</age>  <school>NanJing University</school> </user> <user>  <name>女神</name>  <age>23</age>  <school>HongKong University</school> </user></AllUsers>

我們用一個數組來存放,最終數據結構為

(    {    message = "用戶信息";  },    {    age = 10;    name = "芳仔小腳印";    school = "JiangSu University";  },    {    age = 22;    name = "毒蟲";    school = "NanJing University";  },    {    age = 23;    name = "女神";    school = "HongKong University";  })

解析步驟

一、聲明代理 NSXMLParserDelegate

二、解析

復制代碼 代碼如下:

// 遇到節點message和user時作為一個字典存放
    NSArray *keyElements = [[NSArray alloc] initWithObjects:@"message",@"user", nil];
    // 需要解析的字段
    NSArray *rootElements = [[NSArray alloc] initWithObjects:@"message",@"name",@"age",@"school", nil];
    // 獲取xml文件的路徑
    NSString *xmlPath = [[NSBundle mainBundle] pathForResource:@"users" ofType:@"xml"];
    // 轉化為Data
    NSData *data = [[NSData alloc] initWithContentsOfFile:xmlPath];
    
    // 初始化
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];
    
    // 代理
    xmlParser.delegate = self;
    // 開始解析
    BOOL flag = [xmlParser parse];
    if (flag) {
        NSLog(@"解析成功");
    }
    else{
        NSLog(@"解析出錯");
    }

中間變量,在.m的interface的中定義
復制代碼 代碼如下:

NSString *currentElement;
    
    NSString *currentValue;
    
    NSMutableDictionary *rootDic;
    
    NSMutableArray *finalArray;

代理方法
復制代碼 代碼如下:

#pragma - mark 開始解析時
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
    // 用數組存儲每一組信息
    finalArray = [[NSMutableArray alloc] init];
    
    
}
#pragma - mark 發現節點時
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    for(NSString *key in self.keyElements){
        if ([elementName isEqualToString:key]) {
            // 關鍵節點開始時,初始化一個字典來存放值
            rootDic = nil;
            
            rootDic = [[NSMutableDictionary alloc] initWithCapacity:0];
            
        }
        else {
            for(NSString *element in self.rootElements){
                if ([element isEqualToString:element]) {
                    currentElement = elementName;
                    currentValue = [NSString string];
                }
            }
        }
    }
    
}
#pragma - mark 發現節點值時
 
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    
    if (currentElement) {
 
        currentValue = string;
        [rootDic setObject:string forKey:currentElement];
    }
    
}
#pragma - mark 結束節點時
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if (currentElement) {
        [rootDic setObject:currentValue forKey:currentElement];
        currentElement = nil;
        currentValue = nil;
    }
    for(NSString *key in self.keyElements){
 
        if ([elementName isEqualToString:key]) {
            // 關鍵節點結束時,將字典存放在數組中
            if (rootDic) {
 
                [finalArray addObject:rootDic];
            }
        }
    }
}
#pragma - mark 結束解析
-(void)parserDidEndDocument:(NSXMLParser *)parser
{
    
}

解析完成后,打印出finalArray為

( {  message = "/U7528/U6237/U4fe1/U606f"; }, {  age = 10;  name = "/U82b3/U4ed4/U5c0f/U811a/U5370";  school = "JiangSu University"; }, {  age = 22;  name = "/U6bd2/U866b";  school = "NanJing University"; }, {  age = 23;  name = "/U5973/U795e";  school = "HongKong University"; })

使用SBJson拼接和解析json
1.ios解析json
使用開源json包,項目地址:
http://www.superloopy.io/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);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久这里只有精品视频首页| 亚洲第一偷拍网| 日韩欧美aaa| 欧美丝袜美女中出在线| 4p变态网欧美系列| 欧美老女人在线视频| 国产精品一区二区女厕厕| 国产做受高潮69| 欧美国产日韩中文字幕在线| 欧洲日本亚洲国产区| 国产精品麻豆va在线播放| 国产精品美女主播| 成人免费在线视频网址| 亚洲va久久久噜噜噜久久天堂| 欧美日韩国产成人在线观看| 午夜精品久久久久久久99热| 亚洲xxxx妇黄裸体| 91久久精品国产91久久性色| 亚洲免费福利视频| 国产精品久久久久久中文字| 国产日韩欧美日韩大片| 中文字幕欧美精品日韩中文字幕| 亚洲综合一区二区不卡| 国产91精品久久久久| 国产福利精品av综合导导航| 久久久久久九九九| 精品久久久久久| 亚洲午夜久久久久久久| 日韩在线视频免费观看高清中文| 成人免费在线网址| 欧美激情影音先锋| 日本三级韩国三级久久| 97欧美精品一区二区三区| 欧美在线视频播放| 狠狠综合久久av一区二区小说| 欧美电影免费观看| 日韩激情av在线免费观看| 成人性教育视频在线观看| 亚洲天堂av综合网| 成人性生交xxxxx网站| www.xxxx欧美| 日韩精品亚洲精品| 国产剧情久久久久久| 国产一区二区在线播放| 亚洲精选中文字幕| 51色欧美片视频在线观看| 国产欧美 在线欧美| 91最新国产视频| 国产成人精品久久久| 亚洲精品视频网上网址在线观看| 亚洲国产成人久久| 中文字幕久热精品视频在线| 国产xxx69麻豆国语对白| 亚洲高清久久久久久| 亚洲欧美中文日韩在线v日本| 久久久精品日本| 国产一区二区丝袜高跟鞋图片| 久久69精品久久久久久久电影好| 亚洲一区久久久| 精品国模在线视频| 57pao国产精品一区| 三级精品视频久久久久| 国产精选久久久久久| 超碰97人人做人人爱少妇| 欧美亚洲午夜视频在线观看| 国产精品无av码在线观看| 日本精品视频在线播放| 国产精品视频免费在线观看| 岛国av午夜精品| 国产日韩专区在线| 中文字幕在线看视频国产欧美在线看完整| 欧美极品美女视频网站在线观看免费| 久久综合伊人77777蜜臀| 91香蕉嫩草影院入口| 欧美另类69精品久久久久9999| 国产亚洲精品美女久久久久| 日韩av在线免费看| 亚洲偷熟乱区亚洲香蕉av| 欧美午夜片在线免费观看| 精品动漫一区二区三区| 精品呦交小u女在线| 国产精品麻豆va在线播放| 日韩精品免费一线在线观看| 久久影视免费观看| 国产在线久久久| 久久久免费精品| 日韩三级成人av网| 最近2019中文字幕mv免费看| 午夜精品福利视频| 国产激情久久久久| 欧美精品videos性欧美| 国产精品中文字幕久久久| 日韩精品在线电影| 亚洲成人999| 日韩中文综合网| 久久国产精品99国产精| 国产精品va在线播放| 日韩免费在线免费观看| 国产日韩欧美影视| 日韩高清电影免费观看完整| 亚洲高清久久久久久| 免费av在线一区| 欧美日韩亚洲一区二区三区| 91久久中文字幕| 国产美女91呻吟求| 久久精品国产亚洲一区二区| 国产精品久久99久久| 国内精品400部情侣激情| 亚洲国产美女精品久久久久∴| 久久影院资源网| 国产91露脸中文字幕在线| 亚洲国产小视频在线观看| 不卡中文字幕av| 国产精品午夜国产小视频| 2019中文字幕在线免费观看| 国产成人av网址| 精品国产美女在线| 国产精品久久久久福利| 在线日韩日本国产亚洲| 日韩精品视频在线免费观看| 亚洲色图校园春色| 国产综合久久久久久| 国产欧美日韩丝袜精品一区| 久久久精品欧美| 国产精品免费观看在线| 久久国产一区二区三区| 亚洲国产欧美精品| 成人在线一区二区| 亚洲性xxxx| 尤物九九久久国产精品的分类| www亚洲精品| 国产精品在线看| 国产精品99蜜臀久久不卡二区| 91大神在线播放精品| 九九久久精品一区| 亚洲国产又黄又爽女人高潮的| 一区二区亚洲欧洲国产日韩| 自拍视频国产精品| 国产一区二区激情| 亚洲欧洲高清在线| 欧美劲爆第一页| www.欧美精品一二三区| 欧美日韩亚洲精品一区二区三区| 伊人久久五月天| 精品久久中文字幕| 国内精品一区二区三区| 国内精品小视频| 亚洲欧美日韩在线高清直播| 欧美中文在线视频| 亚洲精品美女久久久久| 久久99久久久久久久噜噜| 日韩av在线网| 国产成人欧美在线观看| 国产精品美女免费视频| 久久久久久久久中文字幕| 粉嫩老牛aⅴ一区二区三区| 亚洲精品福利在线| 精品中文字幕在线2019| 亚洲精品aⅴ中文字幕乱码| 亚洲欧美日韩天堂一区二区| 亚洲网站在线播放| 奇门遁甲1982国语版免费观看高清| 欧美天堂在线观看| www.久久久久久.com|