2017-03-09 58 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