簡體   English   中英

Swift JSON解析並從數組中打印指定值

[英]Swift JSON parsing and printing a specified value from an array

嗨,我正在嘗試從某個JSON API獲取數據。 我可以從API獲取所有值的快照,如下所示。 但是我無法在變量中放入特定行。 這是我得到的JSON形式。 我想打印“描述”值。有人可以幫我嗎? 我得到的API結果

而Hier是我的代碼:

func apiRequest() {
    let config = URLSessionConfiguration.default
    let username = "F44C3FC2-91AF-5FB2-8B3F-70397C0D447D"
    let password = "G23@rE9t1#"
    let loginString = String(format: "%@:%@", username, password)
    let userPasswordData = loginString.data(using: String.Encoding.utf8)
    let base64EncodedCredential = userPasswordData?.base64EncodedString()
    let authString = "Basic " + (base64EncodedCredential)!

    print(authString)
    config.httpAdditionalHeaders = ["Authorization" : authString]
    let session = URLSession(configuration: config)

    var running = false
    let url = NSURL(string: "https://start.jamespro.nl/v4/api/json/projects/?limit=10")

    let task = session.dataTask(with: url! as URL) {
        ( data, response, error) in
        if let taskHeader = response as? HTTPURLResponse {
            print(taskHeader.statusCode)
        }
        if error != nil {
            print("There is an error!!!")
            print(error)
        } else {
            if let content = data {
                do {
                    let array = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
                    print(array)

                    if let items = array["items"] {
                         if let description = items["Description"] as? [[String:Any]]{
                            print(description as Any)
                         }
                    }
                }
                catch {
                    print("Error: Could not get any data")
                }
            }
        }
        running = false
    }


    running = true
    task.resume()

    while running {
        print("waiting...")
        sleep(1)
    }
}

首先, array 不是數組,也不是AnyObject ,它是字典,在Swift 3中是[String:Any]

let dictionary = try JSONSerialization.jsonObject(with: content) as! [String:Any]
print(dictionary)

我不知道為什么所有教程都建議使用.mutableContainers作為選項。 這在Objective-C中可能有用,但在Swift中則完全沒有意義。 省略參數。

關鍵items的對象是字典數組(同樣,Swift 3中未指定的JSON類型是Any) 使用重復循環獲取所有description值,並且必須將字典的所有值從Any向下轉換為期望的類型。

if let items = dictionary["items"] as? [[String:Any]] {
   for item in items {
       if let description = item["Description"] as? String {
          print(description)
       }
   }
}

看起來項目是一個需要遍歷的數組。 這是一些示例代碼,但是我想警告您,該代碼尚未針對您的數據進行測試。

if let items = array["items"] as? [[String: AnyObject]] {
    for item in items {
        if let description = item["Description"] as? String{
            print("Description: \(description)")
        }
    }
}

上面的代碼或其中的一些變化,應該使您走上正確的道路。

使用SwiftyJSON,它就像json["items"][i].arrayValue一樣json["items"][i].arrayValue就像返回和帶有項Values或json["items"][i]["description"].stringValue數組一樣,可以從中獲取字符串一排

暫無
暫無

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

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