Arrays 将JSON数组解析为标签
我试图解析下面的JSON(实际数据是所列格式的20倍) 这是我现在掌握的代码。它成功地将值“Last”打印到控制台,但当我合并Dispatch.Queue时,我得到一个Arrays 将JSON数组解析为标签,arrays,json,swift,dispatch,Arrays,Json,Swift,Dispatch,我试图解析下面的JSON(实际数据是所列格式的20倍) 这是我现在掌握的代码。它成功地将值“Last”打印到控制台,但当我合并Dispatch.Queue时,我得到一个线程1:SIGBRT信号没有将值打印到标签上 let myJson = try JSONSerialization.jsonObject(with: content) as! [String:Any] if let info = myJson["result"] as! [[String:Any]]? { for i i
线程1:SIGBRT信号
没有将值打印到标签上
let myJson = try JSONSerialization.jsonObject(with: content) as! [String:Any]
if let info = myJson["result"] as! [[String:Any]]?
{
for i in 0..<20 {
if i == 1
{
if let dict = info[i] as? [String:Any]
{
if let price = dict["Last"]
{
print(price)
//DispatchQueue.main.async
//{
// self.label1.text = price as String
//}
}
}
}
让myJson=试试JSONSerialization.jsonObject(with:content)as![字符串:任意]
如果让info=myJson[“结果”]as![[String:Any]]?
{
对于0中的i..JSON不使用=
符号或分号。请将每个=
更改为冒号,将每个分号更改为逗号,以便
Ask = "4.8e-05";
BaseVolume = "32.61025363";
Bid = "4.695e-05";
变成
Ask: "4.8e-05",
BaseVolume: "32.61025363",
Bid: "4.695e-05",
很可能您的self.label1
插座未连接。请修复该连接
您还应该更新获取“Last”
键值的if let
,如下所示:
if let price = dict["Last"] as? String{
print(price)
DispatchQueue.main.async {
self.label1.text = price
}
}
您还可以进行一些其他清理:
if let myJson = try JSONSerialization.jsonObject(with: content) as? [String:Any] {
if let info = myJson["result"] as? [[String:Any]] {
for (index, dict) in info.enumerated() {
if index == 1 {
if let price = dict["Last"] as? String {
print(price)
DispatchQueue.main.async {
self.label1.text = price
}
} // else no "Last" or not a String
}
}
} // else "result" doesn't contain expected array of dictionary
} // else content isn't a valid JSON dictionary
避免所有这些强制强制转换。特别是避免强制转换为可选模式。不幸的是,我无法编辑实际的json。不过,我在另一个代码中找到了使用=符号的方法。由于OP的代码大部分工作正常,显然问题不在于json的格式。“json”显示的实际上是记录解析字典的输出,因此JSON没有任何问题需要解决。首先,感谢您的帮助。我已通过@IBOutlet-weak-var-label1:UILabel!
连接了标签,并已更新到您的代码中,但仍然没有显示。价格也没有输出到控制台。是否继续你知道我可能做错了什么吗?代码走了多远?还要注意索引从0开始,所以你可能想要index==0
。price
也很可能不是一个String
。它可能是一个数字。尝试将as?String
更改为as?NSNumber
。然后更改“=price”`到`=price.stringValue`。成功了!我整天都在看这段代码,谢谢。
if let myJson = try JSONSerialization.jsonObject(with: content) as? [String:Any] {
if let info = myJson["result"] as? [[String:Any]] {
for (index, dict) in info.enumerated() {
if index == 1 {
if let price = dict["Last"] as? String {
print(price)
DispatchQueue.main.async {
self.label1.text = price
}
} // else no "Last" or not a String
}
}
} // else "result" doesn't contain expected array of dictionary
} // else content isn't a valid JSON dictionary