[英]Swift JSON parsing and printing a specified value from an array
嗨,我正在嘗試從某個JSON API獲取數據。 我可以從API獲取所有值的快照,如下所示。 但是我無法在變量中放入特定行。 這是我得到的JSON形式。 我想打印“描述”值。有人可以幫我嗎?
而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.