自上周以来我一直收到错误,但我可以找到问题所在。也许你可以帮我。
我有这个功能:
func getAllBlocks () { //Abruf der JSON Daten zum Überblick.
let JSONurl = "https://chain.api.btc.com/v3/block/latest,5000,2" //URL festlegen
let url = URL(string: JSONurl ) //String umwandeln in eine URl
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in //Datenabruf
if error != nil {
print("ERROR \(String(describing: error))")
return
}
do {
let loadedJSON = try JSONSerialization.jsonObject(with: data!) as! [String:Any] //JSON verarbeiten
print(loadedJSON)
for (key, value) in loadedJSON {
print(key)
if (key == "data") { //prüfen auf key "data" und dann dessen Dict abgreifen
print("data")
XXXX
}}
} catch{ print("Error beim JSON decodieren! \(error)") }
}
task.resume()
}
所以它应该做的是:从 URL 中获取这三个 block ,并将所有数据放入数组或结构中。它的作用:只要我只加载“最新” block 就可以了。但是当我加载多个 block 时,会弹出一个我无法处理的数组。 代码运行到最后一个打印语句,但之后无论我如何尝试获取数据,它都会崩溃。
我做错了什么?
谢谢!
最佳答案
您可以使用 Swift Codable Protocol(可从 Swift 4 获得)解析 JSON。为此,您需要创建一个必须符合可编码协议(protocol)的结构。在本例中,我创建了两个结构。 “BitCoinData”保存数据收集和错误。 “BitData”是保存数据集合内部的属性。
请注意,属性应与 JSON 响应键相同
使用以下网址中的数据进行测试:
https://chain.api.btc.com/v3/block/5000,50001
https://chain.api.btc.com/v3/block/latest,5000,2
struct BitCoinData: Codable {
var data : [BitData]?
var err_no: Int?
var err_msg: String?
}
struct BitData: Codable {
var height: Int?
var version: Int?
var mrkl_root: String?
var timestamp: Int?
var bits : Int?
var nonce: Int?
var hash: String?
var prev_block_hash: String?
var next_block_hash: String?
var size: Int?
var pool_difficulty: Int?
var difficulty: Double?
var tx_count: Int?
var reward_block: Int?
var reward_fees: Int?
var created_at: Int?
var confirmations: Int?
var is_orphan: Bool?
var curr_max_timestamp: Int?
var is_sw_block: Bool?
var stripped_size: Int?
var weight: Int?
}
//JSONDecoder 解析响应。
do {
let decoder = JSONDecoder()
//Pass the class here to start decoding your JSON response with respect to your mapped class.
let gitData = try decoder.decode(BitCoinData.self, from: responseData)
print("JSON Response: \(gitData.data![0].height!)")
}
catch DecodingError.dataCorrupted{
print("Data Corrupted");
}
catch DecodingError.typeMismatch{
print("typeMismatch");
}
catch DecodingError.valueNotFound{
print("Value Not Found");
}
catch DecodingError.keyNotFound{
print("Key Not Found");
}
catch {
print("Unable to Parse");
}
关于arrays - JSON 与数组中的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48404467/