使用 Swift 2.0 解析并跳转到 JSON 文件中的下一个块

Posted

技术标签:

【中文标题】使用 Swift 2.0 解析并跳转到 JSON 文件中的下一个块【英文标题】:Parsing and Jumping into the next block in JSON file with Swift 2.0 【发布时间】:2016-02-10 03:02:25 【问题描述】:

我目前正在学习如何在 Swift 2.0 中获取和解析 JSON 文件。

这是我从朋友那里提供的示例 JSON 文件


  "name": "Busitevent",
  "count": 398,
  "frequency": "Every 30 mins",
  "version": 93,
  "newdata": true,
  "lastrunstatus": "success",
  "thisversionstatus": "success",
  "nextrun": "Wed Feb 10 2016 02:43:20 GMT+0000 (UTC)",
  "thisversionrun": "Wed Feb 10 2016 02:13:19 GMT+0000 (UTC)",
  "results": 
    "collection1": [
      
        "eventTitles": 
          "href": "https://events.ucsc.edu/event/3338",
          "text": "32nd Annual Martin Luther King Jr. Convocation featuring Alicia Garza"
        ,
        "eventDates": "",
        "eventDescription": "",
        "index": 1,
        "url": "https://events.ucsc.edu/"
      

我正在尝试模式匹配“collection1”,以便将其转换为对象

这是我到目前为止所得到的(将网址替换为假网址)

let url = NSURL(string: "www.jsonsourcefile.com")
    let request = NSURLRequest(URL: url!)

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) (response, data, error) in
        //print(NSString(data: data!, encoding: NSUTF8StringEncoding))
        var names = [String]()

        do 
            let json : NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! NSDictionary

            if let collection1 : NSArray = json["collection1"] as? NSArray
                print("you got it")
                        //names.append(collection1)
    


         catch 
            print("error serializing JSON: \(error)")
        

        print(names) // ["Bloxus test", "Manila Test"]

    

所以我面临的主要问题是我的 if 语句不匹配 collection1,我不知道为什么。

【问题讨论】:

你试过json["results"]["collection1"]json["results"][0]["collection1"] 你提供了一个无效的 JSON,你能用一个有效的 JSON 更新吗? 尝试使用 SwiftyJSON 解析 json(一个有效的)(我发现它使处理 json 变得非常简单) 【参考方案1】:

在尝试检索 collections1 数组之前,您必须先获取 results 字典。下面提供的代码可以让您很好地理解如何在没有任何第三方解析器的情况下解析 JSON。

示例 JSON:(因为问题没有有效的 JSON)


    "employees":[
            "firstName":"John",
            "lastName":"Doe"
        ,
        
            "firstName":"Anna",
            "lastName":"Smith"
        ,
        
            "firstName":"Peter",
            "lastName":"Jones"
    ]

在上面的 JSON 中,你需要注意以下几点,

它是一个对象字典 employees 对象是一个字典数组

要获取firstName 的值,您必须使用嵌套的if let 块来获取数据。

var jsonString = "\"employees\":[\"firstName\":\"John\", \"lastName\":\"Doe\",\"firstName\":\"Anna\", \"lastName\":\"Smith\",\"firstName\":\"Peter\", \"lastName\":\"Jones\"]"

do 
    let data = jsonString.dataUsingEncoding(NSUTF8StringEncoding)
    let json: NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! NSDictionary

    if let employees = json["employees"] as? [NSDictionary] 
        for employee in employees 
            if let firstName = employee["firstName"] 
                print("First name ===> \(firstName)")
            
        
    
    else 
        print("failure")
    

catch let error as NSError 
    print("Error while parsing data ===> \(error)")

注意:如果必须解析更大的 JSON,嵌套的 if lets 的复杂性会更高。有第 3 方 Swift JSON 解析器(如 SwiftyJSON)可以简化您访问对象的方式。 SwiftyJSON 使用的语法类似于@kye 提到的语法。

【讨论】:

以上是关于使用 Swift 2.0 解析并跳转到 JSON 文件中的下一个块的主要内容,如果未能解决你的问题,请参考以下文章

PHP弹出提示框并跳转到新页面即重定向到新页面

使用 javascript 暂停 CSS 动画并跳转到动画中的特定位置

热键以分号结束行并跳转到 Sublime Text 2 中的新行

php GF表单提交并跳转到表单

js判断手机访问并跳转到相应页面

如何让qemu产生外部中断并跳转到isr(裸机代码)