2017-03-09 56 views
0

我見過很多問題和解答。我試過了,我無法弄清楚。我訪問過我的所有者服務器的responseJSON沒有問題。但是現在我正在嘗試使用第三方API並遇到麻煩。我正在使用Alamofire和SwiftyJSON。無法從json數據中提取價值

讓JSON = JSON(數據:數據)

這看起來是什麼樣的JSON:

{"maxResults":50,"startAt":0,"isLast":true,"values":[{"id":1,"self":"https://stackrank.atlassian.net/rest/agile/1.0/board/1","name":"JI board","type":"scrum"},{"id":2,"self":"https://stackrank.atlassian.net/rest/agile/1.0/board/2","name":"Board2","type":"scrum"}]} 

爲什麼我不能訪問任何一個值?
JSON [ 「的maxResults」。numberValue給了我 '0'
JSON [ 「值」。arrayValue給我一個空數組[]

我見過關於編碼等一堆答案..但我無法讓它工作。

這裏是Alamofire顯示響應格式的片段:

Alamofire.request(request).responseJSON { 
    response in 
    switch response.result { 
    case .success: 
    success(response.data!) 
+1

不使用SwiftyJson的JSON()對象?我嘗試了你的建議。當我嘗試json [「values」]時,我得到「Type'Any'沒有下標成員。 – mafarja

+0

嘗試轉換爲[String:AnyObject]並得到無法將類型'__NSArrayI'(0x10ba9dd88)的值轉換爲'NSDictionary – mafarja

回答

0

你越來越不能是SwiftJSON對象的對象。這裏有一個完美的作品操場代碼(需要SwiftyJSON.swift是在源文件夾):

let jsontext = "{\"maxResults\":50,\"startAt\":0,\"isLast\":true,\"values\":[{\"id\":1,\"self\":\"https://stackrank.atlassian.net/rest/agile/1.0/board/1\",\"name\":\"JI board\",\"type\":\"scrum\"},{\"id\":2,\"self\":\"https://stackrank.atlassian.net/rest/agile/1.0/board/2\",\"name\":\"Board2\",\"type\":\"scrum\"}]}" 

let data = jsontext.data(using: .utf8)! 
let json = JSON(data) 

print(json["maxResults"].intValue) 
print(json["values"].arrayValue) 

這完美的作品。

在原始數據而言,這裏是another SO question proposed

Alamofire.request(.GET, url).validate().responseJSON { response in 
    switch response.result { 
    case .Success(let data): 
     let json = JSON(data) 
     let maxResults = json["maxResults"].intValue 
     let values = json["values"].arrayValue 
     print(maxResults) 
    case .Failure(let error): 
     print("Request failed with error: \(error)") 
    } 
} 
+0

謝謝大衛,你的回答做了兩件事:1)更好地理解模式; 2)發現我的SwiftyJSON版本已經過時,你的回答幫助我完成了這個工作。 – mafarja