在 SWIFT 4 中获取超出本地范围的 JSON 数据
Getting JSON data out of local scope in SWIFT 4
因此,几天来我一直在努力使这段代码正常工作,但我不知道自己做错了什么。
我正在从网上获取 JSON 并使用 Struct 块对其进行解析。
问题是:我想使用 JSON 中创建解码函数的字典和数组。
这是代码
import UIKit
struct Currency_format: Decodable{
var iso_code: String
var example_format : String
var decimal_digits : Int
var decimal_separator : String
var symbol_first : Bool
var group_separator : String
var currency_symbol : String
var display_symbol : Bool
}
struct Date_Format: Decodable{
var format : String
}
struct Budgets: Decodable {
var id : String
var name: String
var last_modified_on : String
var first_month : String
var last_month : String
var date_format : Date_Format
var currency_format : Currency_format
}
struct DataResponse : Decodable {
var data : Data
}
struct Data : Decodable{
var budgets : [Budgets]
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let accessToken = "1234"
let authorizationRequestHeader = "https://www.somewhere.com=\(accessToken)"
guard let url = URL(string: authorizationRequestHeader) else {
print("Error")
return
}
let session = URLSession.shared
session.dataTask(with: url) { (stringData, response, Error) in
let testString = try! dataResponse.decode(DataResponse.self, from:stringData!)
print("Number of records: \(testString.data.budgets.count)")
//THIS PRINT WORKS AS I WANT IT TO WORK. NOT PROBLEM HERE
}.resume()
print("Number of records: \(testString.data.budgets.count)") // BUT THE SAME CODE HERE, DOES NOT WORK AT ALL
做一件事,在 viewDidLoad()
之前初始化 testString
喜欢:
class ViewController: UIViewController {
let testString : DataResponse!
override func viewDidLoad() {
super.viewDidLoad()
let accessToken = "1234"
let authorizationRequestHeader = "https://www.somewhere.com=\(accessToken)"
guard let url = URL(string: authorizationRequestHeader) else {
print("Error")
return
}
let session = URLSession.shared
session.dataTask(with: url) { (stringData, response, Error) in
testString = try! dataResponse.decode(DataResponse.self, from:stringData!)
print("Number of records: \(testString.data.budgets.count)")
}.resume()
print("Number of records: \(testString.data.budgets.count)")
}
希望这对您有所帮助。
JSON 解码器方法无法正常使用 JSON 中可用的 snake_case 键。要正常工作,在这种情况下我们必须使用 CodingKeys 方法。
有关详细信息,请参阅此 documentation。
因此,几天来我一直在努力使这段代码正常工作,但我不知道自己做错了什么。
我正在从网上获取 JSON 并使用 Struct 块对其进行解析。
问题是:我想使用 JSON 中创建解码函数的字典和数组。
这是代码
import UIKit
struct Currency_format: Decodable{
var iso_code: String
var example_format : String
var decimal_digits : Int
var decimal_separator : String
var symbol_first : Bool
var group_separator : String
var currency_symbol : String
var display_symbol : Bool
}
struct Date_Format: Decodable{
var format : String
}
struct Budgets: Decodable {
var id : String
var name: String
var last_modified_on : String
var first_month : String
var last_month : String
var date_format : Date_Format
var currency_format : Currency_format
}
struct DataResponse : Decodable {
var data : Data
}
struct Data : Decodable{
var budgets : [Budgets]
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let accessToken = "1234"
let authorizationRequestHeader = "https://www.somewhere.com=\(accessToken)"
guard let url = URL(string: authorizationRequestHeader) else {
print("Error")
return
}
let session = URLSession.shared
session.dataTask(with: url) { (stringData, response, Error) in
let testString = try! dataResponse.decode(DataResponse.self, from:stringData!)
print("Number of records: \(testString.data.budgets.count)")
//THIS PRINT WORKS AS I WANT IT TO WORK. NOT PROBLEM HERE
}.resume()
print("Number of records: \(testString.data.budgets.count)") // BUT THE SAME CODE HERE, DOES NOT WORK AT ALL
做一件事,在 viewDidLoad()
之前初始化 testString
喜欢:
class ViewController: UIViewController {
let testString : DataResponse!
override func viewDidLoad() {
super.viewDidLoad()
let accessToken = "1234"
let authorizationRequestHeader = "https://www.somewhere.com=\(accessToken)"
guard let url = URL(string: authorizationRequestHeader) else {
print("Error")
return
}
let session = URLSession.shared
session.dataTask(with: url) { (stringData, response, Error) in
testString = try! dataResponse.decode(DataResponse.self, from:stringData!)
print("Number of records: \(testString.data.budgets.count)")
}.resume()
print("Number of records: \(testString.data.budgets.count)")
}
希望这对您有所帮助。
JSON 解码器方法无法正常使用 JSON 中可用的 snake_case 键。要正常工作,在这种情况下我们必须使用 CodingKeys 方法。
有关详细信息,请参阅此 documentation。