iOS Swift:使用AFNetworking解析响应json

时间:2014-06-16 16:36:28

标签: ios json swift afnetworking-2

所以,我正在使用AFNetworking 2.0(带有Bridging-Header的ObjC框架)在本地服务器上发出一些请求。我已经按照一些教程使用Swift对其进行编码。这是代码:

var success = { (operation:AFHTTPRequestOperation!, response:AnyObject!) -> Void in
    println(response.description)
    successBlock(result:response.description)
}

var failure = { (operation:AFHTTPRequestOperation!, response:NSError!) -> Void in
    println(response.description)
    errorBlock(error:response.description)
}

var manager = AFHTTPRequestOperationManager()
manager.responseSerializer = AFJSONResponseSerializer();
manager.GET("http://127.0.0.1:8080/api/manufacturer", parameters: nil, success: success, failure: failure)

它检索json并成功打印。答案是这样的:

(
        {
        "_id" = 539f0973e3c7f4ab1f6078f5;
        name = Manufacturer01;
    },
        {
        "_id" = 539f18c5e3c7f4ab1f6078f6;
        name = Manufacturer02;
    }
)

但是,我无法解析它...我尝试response[0]来获取第一个元素,但是当我尝试执行时,它会崩溃模拟器甚至是Xcode6:(lldb) > po response[0]。我尝试了一切,我看到的每个例子都解释了如何打印结果,但没有解析每个字段。

当我尝试调试它时,response对象看起来像这样:

value = Some {
    Some = (instance_type = Builtin.RawPointer = 0x0b240710 -> 0x00bc5da0 (void *)0x00bc5db4: __NSCFArray)
  }

有任何线索吗?提前谢谢!

3 个答案:

答案 0 :(得分:1)

试试这个

if let responseArray = response as? NSArray {
    let firstElement = responseArray[0]
    // do something with the first element
}

答案 1 :(得分:0)

我认为你的问题在于将它发送回successBlock。由于检索到的信息未在描述对象中正确显示。

var jsonArrayDictionary = response.result.value as? [[String: Any]]

for item in jsonArrayDictionary {
     dump(item["_id"] as? String)
     dump(item["name"] as? String)
}

应该这样做。

答案 2 :(得分:-5)

您的示例响应无效JSON。

如果您的示例是数组,JSON将使用方括号而不是parens,引号和冒号中的字段名称而不是等号。例如:

[
  {
    "_id": 1234,
    "name": "foo bar"
  },
  {
    "_id": 12122,
    "name": "baz"
  }
]

另请参阅其中一个JSON短语,例如:jsonlint.com