作者:Mitchell
一、JSON簡(jiǎn)介
- JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于ECMAScript的一個(gè)子集。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。 易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成(網(wǎng)絡(luò)傳輸速率)。更多信息請(qǐng)參考度娘。
二、iOS 中 JSON 轉(zhuǎn) OC 對(duì)象
- 由于系統(tǒng)自帶的
NSJSONSerialization是效率最高的轉(zhuǎn)化方式,所以這里只介紹這種方式。
- 代碼
NSURL *url = [NSURL URLWithString:@"urlAddress"];
NSURLRequest*request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
/*
第一個(gè)參數(shù):需要轉(zhuǎn)換的json數(shù)據(jù)
第二個(gè)參數(shù):告訴系統(tǒng)如何轉(zhuǎn)換json數(shù)據(jù)(轉(zhuǎn)換出來(lái)的對(duì)象是否可變/子對(duì)象是否可變/是否是標(biāo)準(zhǔn)json)
NSJSONReadingMutableContainers = 轉(zhuǎn)換出來(lái)的對(duì)象是可變數(shù)組或者可變字典
NSJSONReadingMutableLeaves = 轉(zhuǎn)換呼出來(lái)的OC對(duì)象中的字符串是可變的\注意:iOS7之后無(wú)效 bug
NSJSONReadingAllowFragments = 如果服務(wù)器返回的JSON數(shù)據(jù),不是標(biāo)準(zhǔn)的JSON,那么就必須使用這個(gè)值,否則無(wú)法解析
第三個(gè)參數(shù):錯(cuò)誤信息
*/
NSDictionary*dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dict);
}];
- 注意:什么是不標(biāo)準(zhǔn)的 JSON 呢?
- 當(dāng)我們將字符串 json 的值分別設(shè)置為,10、10.1、true、false、null的時(shí)候,options 必須選擇 NSJSONReadingAllowFragments 這種類型,否則就會(huì)無(wú)法解析出其中的內(nèi)容。
NSString *json = @"null";
//NSString *json = @"10";
//NSString *json = @"10.1;
// 10 --> NSNumber
// 10.1 --> NSNumber
// true/false --> NSNumber
// null --> NSNull(空對(duì)象)
NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];
id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@", [obj class]);
三、OC 對(duì)象轉(zhuǎn) JSON
NSDictionary *dict = @{
@"name":@"Mitchell",
@"sex":@"man"
};
/*
第一個(gè)參數(shù): 需要轉(zhuǎn)換為JSON的對(duì)象
第二個(gè)參數(shù): 轉(zhuǎn)換為JSON之后是否需要排版
第三個(gè)參數(shù): 錯(cuò)誤信息
*/
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
NSString *temp = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。