2016-02-29 165 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]