URLSession returns 数据的大小而不是数据的实际内容
URLSession returns the size of the data instead of the actual contents of the data
我正在尝试学习如何使用 URLSession,所以我正在尝试从 [=31] 中获取 raw JSON =] 作为一致性检查是否有效。但我不明白为什么它以字节为单位输出数据响应 size 而不是实际数据
我在网上找到的 Here's an example 并进行了修改以尝试将其设置为 return 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()
此代码 return类似于
100 bytes
,而不是 JSON 本身。没有任何意义,Apple's documentation 说 data
是“服务器 returned 的数据。”,那么为什么 returning 的大小数据而不是 URL?
的 JSON
数据任务的结果总是一个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()
- 为了缩短代码,这个问题没有安全地处理可选值。如果可选值可以为零,请确保您安全地解包它们。
我正在尝试学习如何使用 URLSession,所以我正在尝试从 [=31] 中获取 raw JSON =] 作为一致性检查是否有效。但我不明白为什么它以字节为单位输出数据响应 size 而不是实际数据
我在网上找到的Here's an example 并进行了修改以尝试将其设置为 return 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()
此代码 return类似于
100 bytes
,而不是 JSON 本身。没有任何意义,Apple's documentation 说 data
是“服务器 returned 的数据。”,那么为什么 returning 的大小数据而不是 URL?
数据任务的结果总是一个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()
- 为了缩短代码,这个问题没有安全地处理可选值。如果可选值可以为零,请确保您安全地解包它们。