2014-06-16 68 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) 
} 

這可能應該這樣做。