2016-02-29 166 views
0

下面是一般的JSON我看到:解析JSON没有对象名称

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

但我试图解析JSON的格式,没有物体(“雇员”从上面的例子):

[{"id":"1","company":"1","facility":"2","starttime":"1454936400","complete_time":"1454979600","scheduled_hours":"12"},{"id":"3","company":"1","facility":"2","starttime":"1455021660","complete_time":"1455061660","scheduled_hours":"12"}] 

下面是我想要使用的代码:

let requestURL: NSURL = NSURL(string: url)! 
     let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL) 
     let session = NSURLSession.sharedSession() 
     let task = session.dataTaskWithRequest(urlRequest) { 
      (data, response, error) -> Void in 

      let httpResponse = response as! NSHTTPURLResponse 
      let statusCode = httpResponse.statusCode 

      if (statusCode == 200) { 

       do{ 

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

        if let stations = json[1] as? [[String: AnyObject]] { 
         print(json) 
         for station in stations { 

          if let name = station["company"] as? String { 
           print(name) 

          } 
         } 

        } 

       }catch { 
        print("Error with Json: \(error)") 

       } 

      } 

     } 

     task.resume() 

但我不能输出任何来自JSON数据的值。我该怎么做?我在Swift和XCode中很新。

或者如果我可以格式化我的数据看起来像第一个JSON,它会好吗?数据从SQL查询中作为数组返回。

更新:当我打印(json [1])时,它只打印第二组。我想我越来越近了。

+0

目前尚不清楚你的意思。你是说你想能够处理没有外部字典的JSON输入,而只是有一个项目数组?你的第二个JSON示例看起来是一个具有完全不同键的字典数组。 –

+0

我的意思是,我如何解析它,而不像第一个示例中的“employees”那样使用外部字典。 –

+0

有一个名为SwiftyJSON的流行库。你可能想看看它。 – Santhosh

回答

1

NSJSONSerialization.JSONObjectWithData可能会非常棘手,因为它可以返回一个Array又名[AnyObject]Dictionary又名[String: AnyObject]

然后你要测试的结果是什么:

let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) 
if let json = jsonData as? [[String: AnyObject]] { 
    // json starts with an array 
    for value in json { 
     // loop through array 
    } 
} else if let json = jsonData as? [String: AnyObject] { 
    // json starts with a key 
    for (key, value) in json { 
     // loop through dictionary key/values 
    } 
} else { 
    // This json is broken 
} 
+0

它总是去Else条款。但是,如果我打印json变量,我可以看到我的数据完好无损。 –

+0

请检查更新后的问题。 –

+0

我更新了我的答案,修复了'json是[AnyObject]'而不是'json是[String]',它解决了你的问题吗? – tgyhlsb

0

1,检查的StatusCode条件为真(200或 “200”?)

2打印数据之前,尝试捕捉

if (statusCode == 200) { 
    print(data) 
      do{ 
       ...... 
       } 

3-打印JSON对象

do{ 

    let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) 
    print(json) 

4检查JSON [1]与[[字符串:AnyObject]