哪个是检索json内容的最佳方法?

时间:2016-07-09 03:06:15

标签: swift

当要求在swift中检索数据/内容时,我发现了两种方法:

  • 1

    override func viewDidLoad() {
        super.viewDidLoad()
    
        if let url = NSURL(string: "https://freegeoip.net/json/") {
            do {
                let contents = try NSString(contentsOfURL: url, usedEncoding: nil)
                print(contents)
            }catch{
                print("Error accessing content!")
            }
        } else{
            print("Bad URL!")
        }
    }
    
  • 2

    override func viewDidLoad() {
        super.viewDidLoad()
    
        let url = NSURL(string: "https://freegeoip.net/json/")
    
        let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { (data, response, error) in
            if let content = data{
                do {
                    let jsonResult = try NSJSONSerialization.JSONObjectWithData(content, options: NSJSONReadingOptions.MutableContainers)
                    print(jsonResult)
                } catch{
                    print("JSON serialization failed")
                }
            }
        }
    
        task.resume()
    }
    

哪一个在技术上是正确/最好的方式,为什么?

3 个答案:

答案 0 :(得分:2)

  • 方式2,因为Foundation提供NSJSONSerialization来使用JSON。
  • 首先,您的内容可能没有NSArray或NSDictionary类型。
  • 第二种方式,您可以使用Asynchronous NSULRSession作为最佳方式。

答案 1 :(得分:1)

< p>无论如何方式2.< / p> &LT p为H.;<强>决不< /强>使用方法1从Internet检索数据。由于同步行为,它将阻止当前线程,并在最坏的情况下阻止整个应用程序。< / p> < p>< code> contentsOfURL< / code>应该使用字符串,数据,数组,字典,图像等的API< strong> only< / strong>使用本地文件系统中的URL。< / p>

答案 2 :(得分:0)

这取决于你的json数据。如果您的json数据只包含单行或单个对象,则可以使用第一个。因为它将您的数据存储为字符串。另一方面,如果您的json数据包含大量数据,如数组中的数组,字典中的数组,数组中的字典,则必须使用第二个,因为您必须进一步处理以获取数组或字典的子项。