簡體   English   中英

如何從 iOS Swift 中的 JSON 響應中獲取數據?

[英]How to get data from JSON response in iOS Swift?

在這里,我使用 swiftyJson pod 庫來獲取響應數據。 普通的 json 響應數據我可以獲取數據,但對於復雜的我無法獲取。

這是我從響應中獲取數據的代碼:

private func makeHTTPGetRequest(path: String, onCompletion: @escaping ServiceResponse) {

    let user = "David****"
    let password = "**************"
    let loginString = "\(user):\(password)"
    guard let loginData = loginString.data(using: String.Encoding.utf8) else {
        return
    }
    let base64LoginString = loginData.base64EncodedString()
    print("base 64 login :\(base64LoginString)")
    let headers = ["Authorization": "Basic \(base64LoginString)"]
    // using URL and request getting a json
    let request = URLRequest(url: NSURL(string: path)! as URL)
    let config = URLSessionConfiguration.default
    config.httpAdditionalHeaders = headers
    let session = URLSession.init(configuration: config)
    session.dataTask(with: request) { (data:Data?, response: URLResponse?, error:Error?) in
        if let jsonData = data { // if data has a data and success
            do {
                let json: JSON = try JSON(data: jsonData)
                onCompletion(json,nil)
                print("json data:\(json)")
            }catch {// error
                onCompletion(JSON(),error)
            }
        } else { // if the data is nil
            onCompletion(JSON(),error)
        }
        }.resume()
}

在 viewController.swift 中使用了這個函數

func addDummyData() {
    // Call API
    RestApiManager.sharedInstance.getRandomUser { (json:JSON) in
        // return json from API
        if let results = json["results"].array { // get results data from json
            print("results:\(results)")
            for entry in results { // save data to items.
                self.items.append(UserObject(json: entry))
            }
            print("array= \(self.items)")
            DispatchQueue.main.async { // back to the main que and reload table
                self.tableView.reloadData()
            }
        }
    }
}

模型類:

import SwiftyJSON

class UserObject {
    //    var pictureURL: String!
    var username: String!
    required init(json: JSON) {
        //        pictureURL = json["picture"]["medium"].stringValue
        username = json["WorkOrder"].stringValue
    }
}

這是我的 json 響應:

{
"d": {
    "results": [
            {
                "__metadata": {
                "id": "http://*******:****/sap/opu/odata/sap/ZPRJ_PM_APPS_IH_SRV/WorkOrderF4Set('000000504780')",
                "type": "ZPRJ_PM_APPS_IH_SRV.WorkOrderF4"
                },
    "WorkOrder": "000000504780",
    "Description": "General Maintenance testing"
            },
    }
}

從 json 響應中,我正在嘗試獲取WorkOrderDescription

任何幫助非常感謝請....

請仔細閱讀 JSON。 最外面的對象是一個帶有鍵d的字典。

要獲得results數組,您必須編寫

if let results = json["d"]["results"].array { ...

而你並不需要一個類,從來沒有聲明屬性IUO這是在初始化init方法

struct User {
    let workOrder: String
    let description: String

    init(json: JSON) {
        workOrder = json["WorkOrder"].stringValue
        description = json["Description"].stringValue
    }
}

旁注:自從 Swift 4 SwiftyJSON已經過時,取而代之的是Codable 它是內置的,而且效率更高。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM