JSON和XML解析

一 、 JSON解析(1.是什么 2.為什么 3.怎么用 4.優(yōu)缺點)

1. JSON是什么

1)是一種輕量級的數(shù)據(jù)格式,一般用于數(shù)據(jù)交互
2)JSON的數(shù)據(jù)格式和OC中的字典和數(shù)組十分相似
??:

OC中的字典和數(shù)組:
@{@"name": @"XMG", @"age": @888}
@{@"names": @[@"XMG",@"XMG1",@"XMG2"]}
JSON:
{"name": "XMG","age": 100}
{"names": ["XMG","rose","jim"]}
2. 為何學(xué)JSON解析

服務(wù)器返回給客戶端用于交互的數(shù)據(jù),一般是JSON格式或者XML格式(文件下載除外),目前JSON格式使用比例占據(jù)更多

3. 如何解析 JSON(重點)
1)解析方案

a.第三方框架 JSONKit\SBJSON\TouchJSON(過去使用率高)
b.蘋果原生(NSJSONSerialization)(推薦使用)

2)解析方案

1)json數(shù)據(jù)->OC對象
//把json數(shù)據(jù)轉(zhuǎn)換為OC對象
-(void)jsonToOC
{
//1. 確定url路徑
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=33&pwd=33&type=JSON"];

//2.創(chuàng)建一個請求對象
NSURLRequest *request = [NSURLRequest requestWithURL:url];

//3.使用NSURLSession發(fā)送一個異步請求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {

    //4.當接收到服務(wù)器響應(yīng)的數(shù)據(jù)后,解析數(shù)據(jù)(JSON--->OC)

    /*
     第一個參數(shù):要解析的JSON數(shù)據(jù),是NSData類型也就是二進制數(shù)據(jù)
     第二個參數(shù): 解析JSON的可選配置參數(shù)
     NSJSONReadingMutableContainers 解析出來的字典和數(shù)組是可變的
     NSJSONReadingMutableLeaves 解析出來的對象中的字符串是可變的  iOS7以后有問題
     NSJSONReadingAllowFragments 被解析的JSON數(shù)據(jù)如果既不是字典也不是數(shù)組, 那么就必須使用這個
     */
    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
    NSLog(@"%@",dict);

}];

}
(2)OC對象->JSON對象

//1.要轉(zhuǎn)換成JSON數(shù)據(jù)的OC對象*這里是一個字典
NSDictionary dictM = @{
@"name":@"wendingding",
@"age":@100,
@"height":@1.72
};
//2.OC->JSON
/

注意:可以通過+ (BOOL)isValidJSONObject:(id)obj;方法判斷當前OC對象能否轉(zhuǎn)換為JSON數(shù)據(jù)
具體限制:
1.obj 是NSArray 或 NSDictionay 以及他們派生出來的子類
2.obj 包含的所有對象是NSString,NSNumber,NSArray,NSDictionary 或NSNull
3.字典中所有的key必須是NSString類型的
4.NSNumber的對象不能是NaN或無窮大
/
/

第一個參數(shù):要轉(zhuǎn)換成JSON數(shù)據(jù)的OC對象,這里為一個字典
第二個參數(shù):NSJSONWritingPrettyPrinted對轉(zhuǎn)換之后的JSON對象進行排版,無意義
*/
NSData *data = [NSJSONSerialization dataWithJSONObject:dictM options:NSJSONWritingPrettyPrinted error:nil];

//3.打印查看Data是否有值
/*
 第一個參數(shù):要轉(zhuǎn)換為STring的二進制數(shù)據(jù)
 第二個參數(shù):編碼方式,通常采用NSUTF8StringEncoding
 */
NSString *strM = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",strM);

(3)OC對象和JSON數(shù)據(jù)格式之間的一一對應(yīng)關(guān)系

//OC對象和JSON數(shù)據(jù)之間的一一對應(yīng)關(guān)系
-(void)oCWithJSON
{
//JSON的各種數(shù)據(jù)格式
//NSString *test = @""wendingding"";
//NSString *test = @"true";
NSString *test = @"{"name":"wendingding"}";

//把JSON數(shù)據(jù)->OC對象,以便查看他們之間的一一對應(yīng)關(guān)系
//注意點:如何被解析的JSON數(shù)據(jù)如果既不是字典也不是數(shù)組(比如是NSString), 那么就必須使用這NSJSONReadingAllowFragments
id obj = [NSJSONSerialization JSONObjectWithData:[test dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];

NSLog(@"%@", [obj class]);


/* JSON數(shù)據(jù)格式和OC對象的一一對應(yīng)關(guān)系
     {} -> 字典
     [] -> 數(shù)組
     "" -> 字符串
     10/10.1 -> NSNumber
     true/false -> NSNumber
     null -> NSNull
 */

}
}
(4)如何查看復(fù)雜的JSON數(shù)據(jù)

方法一:
在線格式化http://tool.oschina.net/codeformat/json
方法二:
把解析后的數(shù)據(jù)寫plist文件,通過plist文件可以直觀的查看JSON的層次結(jié)構(gòu)。
[dictM writeToFile:@"/Users/文頂頂/Desktop/videos.plist" atomically:YES];
(5)視頻的簡單播放

//0.需要導(dǎo)入系統(tǒng)框架
#import <MediaPlayer/MediaPlayer.h>

//1.拿到該cell對應(yīng)的數(shù)據(jù)字典
XMGVideo *video = self.videos[indexPath.row];

NSString *videoStr = [@"http://120.25.226.186:32812" stringByAppendingPathComponent:video.url];

//2.創(chuàng)建一個視頻播放器
MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc]initWithContentURL:[NSURL URLWithString:videoStr]];
//3.present播放控制器

[self presentViewController:vc animated:YES completion:nil];
2. XML(可擴展標記語言)
a.語法
b.XML文檔的三部分(聲明、元素和屬性)
c.其它注意點(注意不能交叉包含、空行換行、XML文檔只能有一個根元素等)

(2) XML解析

a.XML解析的兩種方式
    001 SAX:從根元素開始,按順序一個元素一個元素的往下解析,可用于解析大、小文件
    002 DOM:一次性將整個XML文檔加載到內(nèi)存中,適合較小的文件
b.解析XML的工具
    001 蘋果原生NSXMLParser:使用SAX方式解析,使用簡單
    002 第三方框架
        libxml2:純C語言的,默認包含在iOS SDK中,同時支持DOM和SAX的方式解析
        GDataXML:采用DOM方式解析,該框架由Goole開發(fā),是基于xml2的

003 JSON解析方案

a.第三方框架 JSONKit\SBJSON\TouchJSON
b.蘋果原生(NSJSONSerialization)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • JSON JSON和XML都是需要解析的 JSON是一種輕量級的數(shù)據(jù)格式,一般用于數(shù)據(jù)交互服務(wù)器返回給客戶端的數(shù)據(jù)...
    JonesCxy閱讀 1,883評論 2 10
  • "JSON解析"JSON是一種輕量級的數(shù)據(jù)格式,服務(wù)器返回給客戶端的數(shù)據(jù)一般都是JSON格式或者XML格式。文件下...
    閃電迷閱讀 294評論 0 1
  • 1.0 JSON解析 1.1 JSON簡單介紹001 問:什么是JSON答:(1)JSON是一種輕量級的數(shù)據(jù)格式,...
    panda_sheng閱讀 576評論 0 2
  • 效果圖 一、本文章主要介紹 JSON XML兩種數(shù)據(jù)解析方式 1.JSON 包括系統(tǒng)方法的JSON ,以及三方JS...
    有緣人2830閱讀 939評論 0 3
  • JSON的簡單介紹 1.什么是JSON(1)JSON是一種輕量級的數(shù)據(jù)格式,一般用于數(shù)據(jù)交互(2)服務(wù)器返回給客戶...
    Mario_ZJ閱讀 691評論 0 0