2014-06-16 67 views
9

因此,我正在使用AFNetworking 2.0(带桥接头的ObjC框架)在本地服务器上发出一些请求。我遵循几个教程来使用Swift进行编码。这是代码:iOS Swift:使用AFNetworking分析响应json

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

任何线索?提前致谢!

+0

我也有这个问题。我如何将JSON Dictionary值赋给字符串变量?我有一个var'var serverID:String?',并尝试'self.serverID = responseObject [“server_id”]为?字符串'它崩溃Xcode – Sean

+0

我已经成功的这种方法:http://stackoverflow.com/questions/24259756/unable-to-parse-json-from-afnetworkings-responseobject – heycarsten

+0

@heycarsten不幸的是我得到EXC_BAD_INSTRUCTION在模拟器和EXC_BREAKPOINT上带有该代码的设备。 :( – Koesh

回答

-5

您的示例响应无效JSON。

如果你的例子是一个数组,JSON将有方括号代替parens,引号和冒号中的字段名称而不是等号。例如:

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

也看到JSON棉短绒之一,例如:jsonlint.com

+1

它可能是在调试器中打印的字典的内容 – mAu

+1

@ mAu是正确的。json构造良好,即调试器表示。 – Koesh

1

试试这个

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

我认为内发回的successBlock您的问题奠定。由于检索到的信息在描述对象中没有正确显示。

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

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

这可能应该这样做。