IOS中用NSJSONSerialization來實現對JSON格式的解析

jopen 9年前發布 | 2K 次閱讀 C/C++ Objective-C

   IOS中對JSON格式的解析通常可以采用NSJSONSerialization來實現. 

如,我們可以用個簡答的HTTP請求的方式獲取JSON數據,(以下都是在playground中寫的)

    var url = "http://0.0.0.0:8000" 

    // 返回數據為{"status": 0, "data": [{"hello": "world"}, {"try": "again"}]}

var content = NSString(contentsOfURL:NSURL(string:url)!, encoding:NSUTF8StringEncoding, error:nil)

// 在解析之前,要先將json格式的數據內容轉換成NSData的格式,

var data: NSData = content!.dataUsingEncoding(NSUTF8StringEncoding)!

然后,解析過程也非常簡單.

    var json  = NSJSONSerialization.JSONObjectWithData(data, 

        options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

    json["status"]  // 0, 獲取其中的元素

    let aray = json["data"] as NSArray

    array[0]["hello"] // world

需要注意的是,對于字符串的數據(網絡請求大多都是字符串類型),一定要先轉換成NSData格式,才能使用NSJSONSerialization來解析.


對于JSON的解析和操作,也可以使用另一個JSON類庫https://github.com/SwiftyJSON/SwiftyJSON.

使用方法非常簡單:

let json = JSON(data: dataFromNetworking)

if let userName = json[0]["user"]["name"].string {

// Now you got your value

}

上邊的.string可以自動對可選型進行解包.類似的還有.int, .bool, .number等.

如果是非可選型,則直接使用.intValue, .stringValue, .arrayValue, .dictionaryValue即可,如

let id: Int = json["id"].intValue

let name: String = json["name"].stringValue

let list: Array<JSON> = json["list"].arrayValue

let user: Dictionary<String, JSON> = json["user"].dictionaryValue


如果json是一個字典或者數組,需要做遍歷操作呢,

for (key: String, subJson: JSON) in json { // Do something you want }

for (index: String, subJson: JSON) in json { // Do something you want }


將數據存儲為JSON格式:

json["name"] = JSON("newName")

json[0] = JSON(1)

json["id"].int = 123

json["coordinate"].double = 123.456

json["name"].string = "newString"

json.array = [1, 2, 3, 4]

json.dictionary = ["name": "newName", "age": 20]


獲取raw數據的方式:

let jsonObject: AnyObject = json.object

let jsonObject: AnyObject = json.rawValue

let data = json.rawData()

let string = json.rawString()


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!