iOS開(kāi)發(fā)過(guò)程中,經(jīng)常需要與服務(wù)器進(jìn)行數(shù)據(jù)交互,而這個(gè)數(shù)據(jù)通常以 JSON 格式傳輸。JSON 是直接將數(shù)據(jù)加密而無(wú)需安全認(rèn)證的格式,類(lèi)似于 XML,但更加簡(jiǎn)單易用。然而,在處理 JSON 數(shù)據(jù)時(shí),有時(shí)會(huì)碰到小數(shù)類(lèi)型的數(shù)據(jù),我們需要對(duì)其進(jìn)行解析。
首先,我們需要明確小數(shù)類(lèi)型在 JSON 格式中的表達(dá)方式。在 JSON 中,小數(shù)類(lèi)型與整數(shù)類(lèi)型一樣,都是表示為一個(gè)數(shù)字。而小數(shù)類(lèi)型與整數(shù)類(lèi)型在解析上有兩個(gè)本質(zhì)的不同之處:
一是小數(shù)類(lèi)型可以有小數(shù)點(diǎn),表示小數(shù)部分。
二是小數(shù)類(lèi)型與整數(shù)類(lèi)型的數(shù)據(jù)類(lèi)型不同。在 JSON 格式中,整數(shù)類(lèi)型的數(shù)據(jù)類(lèi)型是 number,而小數(shù)類(lèi)型的數(shù)據(jù)類(lèi)型是 float 類(lèi)型。
在 iOS 中解析 JSON 小數(shù)類(lèi)型的數(shù)據(jù)相對(duì)較為簡(jiǎn)單,我們只需使用 NSJSONSerialization 類(lèi)的函數(shù)進(jìn)行解析即可:
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *error; id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; if(jsonObject && !error){ //解析成功 NSNumber *number = [jsonObject objectForKey:@"price"]; float floatValue = [number floatValue]; NSLog(@"%f",floatValue); }
在這段代碼中,我們首先將字符串類(lèi)型的 JSON 數(shù)據(jù)轉(zhuǎn)換為 NSData 類(lèi)型的數(shù)據(jù),然后使用 NSJSONSerialization 類(lèi)的 JSONObjectWithData:options:error: 函數(shù)進(jìn)行解析。解析成功后,通過(guò) objectForKey: 函數(shù)獲取 JSON 數(shù)據(jù)中的 price 的數(shù)值,再將其轉(zhuǎn)換為 float 類(lèi)型。
總之,在 iOS 開(kāi)發(fā)中處理 JSON 數(shù)據(jù)中小數(shù)類(lèi)型的數(shù)據(jù)時(shí)需格外小心,我們可以通過(guò)這樣簡(jiǎn)單的方式進(jìn)行處理。同時(shí),需要注意的是,數(shù)值類(lèi)型超出 float 范圍的數(shù)據(jù)需使用 double 類(lèi)型進(jìn)行解析。