【问题标题】:Get in a Json child with a String使用字符串获取 Json 子项
【发布时间】:2018-05-20 07:29:50
【问题描述】:

我不想获得名为symbolString 的字符串的值。我不知道该怎么做。这是我到目前为止得到的。我首先尝试进入 Data 子项,然后转到 symbolString 以获取 ImageUrl 值。它似乎不起作用。请帮忙!

final let urlString = "https://www.cryptocompare.com/api/data/coinlist/"

        func downloadJsonWithURL() {
            let url = NSURL(string: urlString)

            URLSession.shared.dataTask(with: (url as? URL)!, completionHandler: {(data, response, error) -> Void in
                if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? NSDictionary {
                    if let DataArray = jsonObj!.value(forKey: "Data") as? NSArray {
                        print(DataArray)
                        for Data in DataArray{
                            if let DataDict = Data as? NSDictionary {
                                if let nameURL = DataDict.value(forKey: "\(self.symbolString)") as? NSDictionary {
                                    if let name = nameURL.value(forKey: "ImageUrl") {
                                        self.imageString.append(name as! String)
                                        print(self.imageString)
                                    }
                                }
                            }
                        }
                    }
                }
            }).resume()
        }

【问题讨论】:

  • JSON 中没有数组 ([])。所有集合类型都是字典 ({})。顺便说一句,变量名应该以小写字母开头,不要在 Swift 中使用 NSArray, NSDictionaryvalueForKey
  • 您的数据中似乎没有任何symbolString 实例。您希望在哪里找到它?
  • symbolString 是一个字符串,例如“BTC”。这行得通,我已经检查过了。但是,如果您查看网址,我首先需要输入“数据”,而不是例如“BTC”(symbolString)。但我不知道该怎么做。

标签: json swift string


【解决方案1】:

你可以试试下面的代码。它对我有用。

 func downloadJsonWithURL() {
    let url = "https://www.cryptocompare.com/api/data/coinlist/"
    var urlRequest = URLRequest(url: URL(string: url)!)
    let task = URLSession.shared.dataTask(with: urlRequest) { data, response, error in

        guard let unwrappedDAta = data else {
            print("Error unwrapping data")
            return
        }

        do {
            let responseJSON = try JSONSerialization.jsonObject(with: unwrappedDAta, options: []) as? NSDictionary

            if let dataDict = responseJSON!["Data"] as? NSDictionary {
                for (key, _) in dataDict {
                    if let keyDict = dataDict[key] as? NSDictionary {
                        if let imageURL = keyDict["ImageUrl"] as? String {
                            self.imageString.append(imageURL)
                        }
                        print(self.imageString)
                    }
                }
            }
        } catch {
            print("Could not get API data. \(error))")
        }
    }
    task.resume()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2019-07-22
    • 2010-11-14
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多