我正在嘗試學習如何使用 URLSession,所以我試圖從 URL獲取原始 JSON作為它作業的一致性檢查。但我不明白為什么它以位元組為單位輸出資料回應大小而不是實際資料
這是我在網上找到并修改以嘗試讓它回傳 JSON的示例:
import UIKit
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
let url = URL(string: "http://date.jsontest.com/")!
let session = URLSession.shared
let q = session.dataTask(with: url) { data, response, error in
do {
print(data!)
}
catch {
print("Error \(error)")
}
}
q.resume()
此代碼回傳類似于 的內容
100 bytes,而不是 JSON 本身。沒有任何意義,Apple的檔案說data是“服務器回傳的資料。”,那么為什么它回傳的是資料的大小而不是URL的JSON呢?
uj5u.com熱心網友回復:
資料任務的結果始終是一個Data物件。無論您認為合適,您都可以使用它。
例如,您可以將其轉換為字串并列印它以查看服務器發送回的內容。
import UIKit
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
let url = URL(string: "http://date.jsontest.com/")!
let session = URLSession.shared
let q = session.dataTask(with: url) { data, response, error in
do {
let string = String(data: data!, encoding: .utf8)!
print("Data as JSON: ")
print(string) // Prints the actual JSON String.
}
catch {
print("Error \(error)")
}
}
q.resume()
或者更準確地說,您可能想要決議另一個物件并獲取其屬性:
import UIKit
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
struct JSONTest: Codable {
let date: String
let time: String
}
let url = URL(string: "http://date.jsontest.com/")!
let session = URLSession.shared
let q = session.dataTask(with: url) { data, response, error in
do {
let jsonTest = try JSONDecoder().decode(JSONTest.self, from: data!)
print("Date: \(jsonTest.date)") // Prints the `date` property of your JSON
}
catch {
print("Error \(error)")
}
}
q.resume()
- 為了縮短代碼,這個問題不能安全地處理可選項。如果它們可以為零,請確保您安全地解開可選項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368978.html
