Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将JSON数组解析为标签_Arrays_Json_Swift_Dispatch - Fatal编程技术网

Arrays 将JSON数组解析为标签

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

我试图解析下面的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 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