ios - 如何在 Swift 中解析具有多个数组的 JSON

标签 ios arrays json swift swift2

我是 swift 语言的新手,新手问题,但我必须问,因为我的头脑对这里的字典和数组用法有点困惑,我有一个像这样的 json;

 {
  "MainPageLast": [
  {},
  {}..
  ],
  "MainPageSport": [
  {},
  {}..
  ],
  "MainPageEco": [
  {},
  {}..
  ],
  "MainPagePol": [
  {},
  {}..
  ]
}

我创建了基类,其中包含所有这些数组作为字典,如下所示;

public class func modelsFromDictionaryArray(array:NSArray) -> [Json4Swift_Base]
    {
        var models:[Json4Swift_Base] = []
        for item in array
        {
            models.append(Json4Swift_Base(dictionary: item as! NSDictionary)!)
        }
        return models
    }

required public init?(dictionary: NSDictionary) {

        if (dictionary["MainPageLast"] != nil) { mainPageLast = MainPageLast.modelsFromDictionaryArray(dictionary["MainPageLast"] as! NSArray) }
        if (dictionary["MainPageSport"] != nil) { mainPageSport = MainPageSport.modelsFromDictionaryArray(dictionary["MainPageSport"] as! NSArray) }
        if (dictionary["MainPageEco"] != nil) { mainPageEco = MainPageEco.modelsFromDictionaryArray(dictionary["MainPageEco"] as! NSArray) }
        if (dictionary["MainPagePol"] != nil) { mainPagePol = MainPagePol.modelsFromDictionaryArray(dictionary["MainPagePol"] as! NSArray) }
    }

public func dictionaryRepresentation() -> NSDictionary {

        let dictionary = NSMutableDictionary()


        return dictionary
    }

我尝试获取数据并尝试解析并希望在调试屏幕中查看返回的数据;

func loadHeadline(completion : ((AnyObject) -> Void)!) {

        let urlString = "http://myapiurl."

        let session = NSURLSession.sharedSession()
        let newsUrl = NSURL(string: urlString)

        let task = session.dataTaskWithURL(newsUrl!, completionHandler: {
            (data, response, error) -> Void in

            do {
                let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! Dictionary<String, AnyObject>

                var models:[Json4Swift_Base] = []
                for item in jsonData
                {
                    models.append(Json4Swift_Base(dictionary: item as NSDictionary)!)
                }

            } catch let error as NSError{
                print("Failed to load: \(error.localizedDescription)")
            }

        })
        task.resume()
    }

我知道我需要在 Json4Swift_Base 类中一一到达每个 [0]、[1]... 项,但我真的不知道如何做到。

当我尝试时抛出此异常

models.append

exc_bad_instruction (code=exc_i386_invop subcode=0x0)

现在,我应该遵循哪种方式或如何获取所有数据并将其放入其中。

谢谢你的建议..

最佳答案

let jsonData = try NSData(contentsOfFile: path, options: NSDataReadingOptions.DataReadingMappedIfSafe)
                do {
                    let jsonResult = try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers) as! NSArray

                    if let allData = jsonResult[0] as? NSDictionary {
                        let header = allData.objectForKey("MainPageMansetData")
                        let magazine = allData.objectForKey("MainPageMagazineData")
                        let sports = allData.objectForKey("MainPageSportsData")
                        let articles = allData.objectForKey("MainPageOtherArticles")

                        print("\(header) \n \(magazine) \n \(sports) \n \(articles)")
                    }
                } catch {}

关于ios - 如何在 Swift 中解析具有多个数组的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38826733/

相关文章:

javascript - 如何使用 Nunjucks 安全地将 JSON 渲染到内联 &lt;script&gt; 中?

iphone - UILabel 重新缩放和光栅化时的图像质量问题

ios - 为 UITableViewCell 动态设置高度的最佳方法

iphone - 如何在 Objective-C 中获取当前周数?

php - 访问未定义数组索引导致的内存泄漏

java - 创建多维数组时的维度顺序

c - C 数组中第二最少出现的元素

python - Pandas 将 DataFrame 保存并读取为 json

iphone - 苹果推送通知开发与发行概况

javascript - 在克隆期间更改 div 的文本