Swift 中的 JSON 解析

Posted

技术标签:

【中文标题】Swift 中的 JSON 解析【英文标题】:JSON Parsing in Swift 【发布时间】:2015-03-26 02:53:05 【问题描述】:

我在做JSON Parsing in Swift tutorial by Ray Wenderlich。

viewDidLoad() 中使用DataManager.getTopAppsDataFromAppsWithSuccess 时,在DataManager 块之外时无法打印出数组。

有人知道如何获取该块之外的数组值吗?

代码:

var apps = [String]()
override func viewDidLoad() 
  DataManager.getTopAppsDataFromAppsWithSuccess  (ByodData) -> Void in
    let json = JSON(data: ByodData)
       if let appArray = json.array
        for appDict in appArray 
          var appName: String = appDict["name"].stringValue
          self.apps.append(appName)
         
      
  println(self.apps)

输入 JSON:

[
   
       "id":1,
       "name":"AdobeReader",
       "url":"comp2014group1.herokuapp.com/apps/1.json";
   ,
   
       "id":2,
       "name":"BBCiPlayer",
       "url":"comp2014group1.herokuapp.com/apps/2.json";
   ,
   
       "id":3,
       "name":"BBCNews",
       "url":"comp2014group1.herokuapp.com/apps/3.json";
   ,
   
       "id":4,
       "name":"BBCWeather",
       "url":"comp2014group1.herokuapp.com/apps/4.json";
   
]

输出:

[]

【问题讨论】:

你能否指定你正在加载的 json 数据? JSON 数据如下:["id":1,"name":"AdobeReader","url":"comp2014group1.herokuapp.com/apps/1.json","id":2," name":"BBCiPlayer","url":"comp2014group1.herokuapp.com/apps/2.json","id":3,"name":"BBCNews","url":"comp2014group1.herokuapp.com/apps/3.json","id":4 ,"name":"BBCWeather","url":"comp2014group1.herokuapp.com/apps/4.json"] 您应该将其添加到问题文本中以提高可读性 那么有什么办法可以解决这个问题,基本上是获取应用名称并在 UIPicker 中显示它们? @skyline75489 是对的,您使用 println 语句太快无法加载数据。 【参考方案1】:

这个函数getTopAppsDataFromAppsWithSuccess 似乎是一个异步函数,不会阻塞执行。因此,println(self.apps) 在实际检索数据之前立即执行。

JSON 数据应该没问题。只是不要尝试像那样打印它。 JSON数据准备好后就可以使用了。

【讨论】:

我想在 UIPickerView 上显示应用程序数组,但是当我使用 self.apps 时,我得到一个空白选择器。无论如何我可以从 DataManager 块中拉出数组 您可以使用块中 UIPickerView 的reloadAllComponents 函数来使用检索到的数据刷新选择器视图。但是,viewDidLoad 可能不是执行此操作的理想场所。因为在加载视图之前调用了viewDidLoad。当您尝试刷新时,选择器视图本身可能还没有准备好。 那么有什么办法可以解决这个问题,基本上是获取应用名称并在 UIPicker 中显示它们? 最简单的方法是使用同步方法,这可能会导致一些滞后。但是您正在处理的数据似乎不是很大。所以应该没问题。

以上是关于Swift 中的 JSON 解析的主要内容,如果未能解决你的问题,请参考以下文章

JSON 解析 --> Swift | JSON 写入中的***类型无效

如何正确解析 SWIFT 中的 JSON 对象

Swift 中的 JSON 解析(iOS)

Swift 3.0 中的 JSON 解析失败

Swift 中的特殊 JSON 解析 [关闭]

swift 3中的JSON解析