iOS Swift:使用 AFNetworking 解析响应 json

Posted

技术标签:

【中文标题】iOS Swift:使用 AFNetworking 解析响应 json【英文标题】:iOS Swift: Parsing response json with AFNetworking 【发布时间】:2014-06-16 16:36:27 【问题描述】:

所以,我正在使用 AFNetworking 2.0(带有桥接头的 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)
  

有什么线索吗?提前致谢!

【问题讨论】:

我也有这个问题。我到底如何将 JSON 字典值分配给字符串变量?我有一个 var var serverID:String? 并且在尝试 self.serverID = responseObject["server_id"] as? String 时它会导致 Xcode 崩溃 我用这种方法取得了成功:***.com/questions/24259756/… @heycarsten 不幸的是,我在模拟器上得到 EXC_BAD_INSTRUCTION,在设备上使用该代码得到 EXC_BREAKPOINT。 :( @Sean 好像会自动转换为NUMBER TYPE,而不是String!!!我有同样的问题,我试图找到一种方法来转换为字符串。 您有什么解决方案吗? 【参考方案1】:

试试这个

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

【讨论】:

【参考方案2】:

我认为您的问题在于将其发送回 successBlock。由于检索到的信息没有在描述对象中正确呈现。

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

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

应该可以的。

【讨论】:

【参考方案3】:

您的示例响应不是有效的 JSON。

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

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

另见 JSON 短绒之一,例如:jsonlint.com

【讨论】:

可能是调试器中打印的字典内容。 @mAu 是对的。 json 结构良好,即调试器表示。

以上是关于iOS Swift:使用 AFNetworking 解析响应 json的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift:使用 AFNetworking 解析响应 json

如何在 Xcode 8 和 iOS 10 中使用 AFNetworking 类和 Swift 3 上传图像

如何在Swift 中使用AFNetworking

swift iOS - AFNetworking扩展 - 使用网址取消请求,需要https://gist.github.com/danielgomezrico/ae53fae471168dde6c

swift iOS - AFNetworking扩展 - 使用网址取消请求,需要https://gist.github.com/danielgomezrico/ae53fae471168dde6c

swift iOS - AFNetworking扩展 - 使用网址取消请求,需要https://gist.github.com/danielgomezrico/ae53fae471168dde6c