SwiftyJSON的使用方法

描述:SwiftyJSON是一個swift編寫的對json數據進行解析的類庫,SwiftyJSON的使用極其方便,而且不用擔心數組越界等問題

GitHub地址:https://github.com/SwiftyJSON/SwiftyJSON

在本文寫作時,SwiftyJSON在GitHub上的star已經達到了14899,光看star就知道,這個庫,還是比較值得用的。

1.cocoapods導入并安裝

pod "SwiftyJSON" 

2.在使用的文件中導入頭文件

import SwiftyJSON

3.獲取要解析的數據(此時為寫死的假數據,實際使用的應該是通過API獲取的數據或者其他途徑獲取的數據,此數據的結構為真實項目的數據結構,所以,解析方式也會以該項目的后續解析方式進行解析,基本能滿足一般的項目的數據解析需求)

var jsonData: [String: Any] = [:]
jsonData["code"] = 200
jsonData["result"] = true
jsonData["message"] = "數據加載成功"
jsonData["data"] = [["id"           : "資訊1_id",
                     "title"        : "資訊1_標題",
                     "pictrueUrl"   : "資訊1_圖片",
                     "description"  : "資訊1_描述",
                     "categoryTitle": "資訊1_分類標題",
                     "tagArray"     : [["id":"yyy0bb1d82beb084718bbd88d45c39710d8","title":".net1"],
                                       ["id":"eee0bb1d82beb084718bbd88d45c39710d8","title":".net1"]],
                     "shareNumber"  : 1,
                     "clickNumber"  : 1],
                            
                     ["id"           : "資訊2_id",
                      "title"        : "資訊2_標題",
                      "pictrueUrl"   : "資訊2_圖片",
                      "description"  : "資訊2_描述",
                      "categoryTitle": "資訊2_分類標題",
                      "tagArray"     : [["id":"yyy0bb1d82beb084718bbd88d45c39710d8","title":".net2"],
                                        ["id":"eee0bb1d82beb084718bbd88d45c39710d8","title":".net2"]],
                      "shareNumber"  : 2,
                      "clickNumber"  : 2]]

4.創建JSON對象

let jsonObj = JSON.init(jsonData)

5.先判斷code與result


if jsonObj["result"].boolValue == false {
    print("獲取失敗")
    return
}
if jsonObj["code"].intValue != 200 {
/// 此處應該是根據服務器返回的code值進行判斷然后進行后續操作,現在只是簡單的打印服務器返回的message
    print(jsonObj["message"].stringValue)
    return
}

6.解析數據主體,暫時將解析的數據均打印出來,實際使用中會對數據進行其他操作

for dic in jsonObj["data"].arrayValue {
    print("id: ", dic["id"].stringValue)
    print("title: ", dic["title"].stringValue)
    print("pictrueUrl: ", dic["pictrueUrl"].stringValue)
    print("description: ", dic["description"].stringValue)
    print("categoryTitle: ", dic["categoryTitle"].stringValue)
    print("shareNumber: ", dic["shareNumber"].intValue)
    print("clickNumber: ", dic["clickNumber"].intValue)
            
    print("tagArray: ", dic["tagArray1"].arrayValue)
    for arr in dic["tagArray"].arrayValue {
        print("\t\ttagid: ", arr["id2"].stringValue)
        print("\t\ttitle: ", arr["title"].stringValue)
    }
}

7.打印的結果


打印結果

8.總結
SwiftyJSON的使用很簡單
首先根據要解析的數據進行創建對象,然后解析數據

創建JSON對象的方式有很多,如下

/**
    方法一: 使用data數據創建一個JSON對象

     - parameter data:  用來解析的數據,data類型
     - parameter opt:   JSON解析的選項. 默認`.AllowFragments`.
     - parameter error: 用來返回錯誤的NSErrorPointer. 默認為`nil`.
     - returns: 創建的JSON對象
     */
    public init(data:Data, options opt: JSONSerialization.ReadingOptions = .allowFragments, error: NSErrorPointer = nil)

    /**
     方法二:使用json字符串創建一個JSON對象

     - parameter string: 一個正常的json字符串,例如 '{"a":"b"}'
     - returns: 創建的JSON對象
     */
    public static func parse(_ string:String) -> JSON

    /**
     方法三:使用一個對象創建一個JSON對象

     - parameter object:  這個對象必須有以下特性: 所有的對象是 NSString/String, NSNumber/Int/Float/Double/Bool, NSArray/Array, NSDictionary/Dictionary, 或 NSNull; 所有的字典的鍵是 NSStrings/String; NSNumbers 不允許是 NaN 或者 infinity.
     - returns: 創建的JSON對象
     */
    public init(_ object: Any)

    /**
     方法四:用一個JSON對象的數組創建一個JSON對象

     - parameter jsonArray: 一個Swift數組,數組的元素為JSON對象

     - returns: 創建的JSON對象
     */
    public init(_ jsonArray:[JSON])

    /**
     方法五:用一個值為JSON對象的字典創建一個JSON對象

     - parameter jsonDictionary: 一個Swif字典,字典的值是JSON對象

     - returns: 創建的JSON對象
     */
    public init(_ jsonDictionary:[String: JSON])

解析的數據類型包括(除了URL與null,其余的每種數據類型都包括有可選值和默認值,如果需要自定義默認值,可以使用解析結果為可選的類型,如果不需要,可以直接使用默認值,所有帶有默認值的類型,都是在以Value為后綴。例如,string獲取的就是可選的字符串,而stringValue獲取的就是帶有默認值的字符串,非可選):

public var double: Double?
public var doubleValue: Double
public var float: Float?
public var floatValue: Float
public var int: Int?
public var intValue: Int
public var uInt: UInt?
public var uIntValue: UInt
public var int8: Int8?
public var int8Value: Int8
public var uInt8: UInt8?
public var uInt8Value: UInt8
public var int16: Int16?
public var int16Value: Int16
public var uInt16: UInt16?
public var uInt16Value: UInt16
public var int32: Int32?
public var int32Value: Int32
public var uInt32: UInt32?
public var uInt32Value: UInt32
public var int64: Int64?
public var int64Value: Int64
public var uInt64: UInt64?
public var uInt64Value: UInt64

public var URL: URL?

public var null: NSNull?

public var numberValue: NSNumber
public var number: NSNumber?

public var stringValue: String
public var string: String?

public var boolValue: Bool
public var bool: Bool?

public var dictionaryObject: [String : Any]?
public var dictionaryValue: [String : JSON]
public var dictionary: [String : JSON]?

public var arrayObject: [Any]?
public var arrayValue: [JSON]
public var array: [JSON]?

結束:
在文章的結束,放上一段我練習用的代碼,基本就是把上面的步驟結合在一起


import UIKit
import SwiftyJSON

class SwiftyJSONViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.white
        title = "SwiftyJSON"
    }
    
    private var jsonData: [String: Any] = [:]
    
    @IBAction func prepareJsonData(_ sender: UIButton) {
        
        jsonData["code"] = 200
        jsonData["result"] = true
        jsonData["message"] = "數據加載成功"
        jsonData["data"] = [["id"           : "資訊1_id",
                             "title"        : "資訊1_標題",
                             "pictrueUrl"   : "資訊1_圖片",
                             "description"  : "資訊1_描述",
                             "categoryTitle": "資訊1_分類標題",
                             "tagArray"     : [["id":"yyy0bb1d82beb084718bbd88d45c39710d8","title":".net1"],
                                               ["id":"eee0bb1d82beb084718bbd88d45c39710d8","title":".net1"]],
                             "shareNumber"  : 1,
                             "clickNumber"  : 1],
                            
                            ["id"           : "資訊2_id",
                             "title"        : "資訊2_標題",
                             "pictrueUrl"   : "資訊2_圖片",
                             "description"  : "資訊2_描述",
                             "categoryTitle": "資訊2_分類標題",
                             "tagArray"     : [["id":"yyy0bb1d82beb084718bbd88d45c39710d8","title":".net2"],
                                               ["id":"eee0bb1d82beb084718bbd88d45c39710d8","title":".net2"]],
                             "shareNumber"  : 2,
                             "clickNumber"  : 2]]
    }
    
    
    @IBAction func analysisJsonData(_ sender: UIButton) {
        
        let jsonObj = JSON.init(jsonData)
        
        if jsonObj["result"].boolValue == false {
            print("獲取失敗")
            return
        }
        if jsonObj["code"].intValue != 200 {
            print(jsonObj["message"].stringValue)
            return
        }
        
        print(jsonObj["message"].stringValue)
        
        for dic in jsonObj["data"].arrayValue {
            print("id: ", dic["id"].stringValue)
            print("title: ", dic["title"].stringValue)
            print("pictrueUrl: ", dic["pictrueUrl"].stringValue)
            print("description: ", dic["description"].stringValue)
            print("categoryTitle: ", dic["categoryTitle"].stringValue)
            print("shareNumber: ", dic["shareNumber"].intValue)
            print("clickNumber: ", dic["clickNumber"].intValue)
            
            print("tagArray: ", dic["tagArray1"].arrayValue)
            for arr in dic["tagArray"].arrayValue {
                print("\t\ttagid: ", arr["id2"].stringValue)
                print("\t\ttitle: ", arr["title"].stringValue)
            }
        }
    }
}

各位,別人為我們造了輪子,我們可以直接拿來用,但是,我們不應該只是會拿來用,在自己不忙的時候,研究一下別人寫的好代碼,嘗試著寫一點自己的輪子,我相信,那會比學會使用輪子更讓人興奮!!!

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

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,868評論 18 139
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,198評論 4 61
  • 本文詳細講解了 Gitbook 生成電子書的完整過程,內容包括:安裝、命令、配置、文檔結構、生成電子書、部署。限于...
    靜默虛空閱讀 11,295評論 9 138
  • 基礎太差,從頭再來!從http到socket。 http請求解析 請求報文分為三部分:請求行、請求頭、請求體 如圖...
    咸魚而已閱讀 553評論 0 0
  • 先有意義,再有條理!【51】 “反思”如何將想法轉化為行動,以及反思的3個問句。想法和雜事,是不可以被管理的,我們...
    朱進偉西農閱讀 825評論 0 2