无法从json数据中提取值

时间:2017-03-09 20:09:30

标签: json swift alamofire swifty-json

我已经看到了许多问题和答案。我试过了,我无法理解。我已经访问了我的所有者服务器的responseJSON没问题。但现在我正在尝试使用第三方API并遇到麻烦。我正在使用Alamofire和SwiftyJSON。

让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 [“values”]。arrayValue给我一个空数组[]

我已经看到了很多关于编码等的答案......但我无法让它发挥作用。

以下是Alamofire的片段,显示了响应格式:

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

1 个答案:

答案 0 :(得分:0)

您获得的对象不能是SwiftJSON对象。这里的游乐场代码完美无缺(要求SwiftyJSON.swift位于Sources文件夹中):

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)")
    }
}