2014-06-16 20 views
9

Vì vậy, tôi đang sử dụng AFNetworking 2.0 (khung công tác ObjC với Bridging-Header) để thực hiện một số yêu cầu trên máy chủ cục bộ. Tôi đã làm theo một vài hướng dẫn để mã nó bằng cách sử dụng Swift. Đây là mã:iOS Swift: Phân tích cú pháp phản hồi json với AFNetworking

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) 

Nó truy xuất dữ liệu và in thành công. Câu trả lời là một cái gì đó như thế này:

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

Tuy nhiên, tôi không thể phân tích nó ... Tôi cố gắng response[0] để có được những yếu tố đầu tiên, nhưng nó bị treo trình giả lập và thậm chí Xcode6 khi tôi cố gắng để làm: (lldb) > po response[0]. Tôi đã thử tất cả mọi thứ, mỗi ví dụ tôi đã thấy giải thích làm thế nào để in kết quả nhưng không có gì về phân tích cú pháp từng lĩnh vực.

Đối tượng response trông như thế này khi tôi cố gắng để gỡ lỗi nó:

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

Bất kỳ đầu mối? Cảm ơn trước!

+0

Tôi cũng gặp sự cố này. Làm cách nào để tôi gán các giá trị từ điển JSON cho một biến chuỗi? Tôi có một var 'var serverID: String?' Và khi cố gắng 'self.serverID = responseObject [" server_id "] là? String' nó bị treo Xcode – Sean

+0

Tôi đã thành công với cách tiếp cận này: http://stackoverflow.com/questions/24259756/unable-to-parse-json-from-afnetworkings-responseobject – heycarsten

+0

@heycarsten Thật không may tôi nhận được EXC_BAD_INSTRUCTION trên Simulator và EXC_BREAKPOINT trên Thiết bị có mã đó. :( – Koesh

Trả lời

-5

Phản hồi mẫu của bạn không phải là JSON hợp lệ.

Nếu ví dụ của bạn là một mảng, JSON sẽ có dấu ngoặc vuông thay vì dấu ngoặc vuông, tên trường trong dấu ngoặc kép và dấu hai chấm thay vì bằng dấu. Ví dụ:

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

Cũng thấy một trong những xơ JSON, ví dụ .: jsonlint.com

+1

Đây có thể là nội dung của từ điển được in trong trình gỡ lỗi – mAu

+1

@ mAu là đúng.Json được xây dựng tốt, đó là đại diện trình gỡ lỗi. – Koesh

1

thử này

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

Tôi nghĩ vấn đề của bạn đặt trong vòng gửi nó trở lại trong successBlock. Vì thông tin đã truy xuất không được hiển thị chính xác trong đối tượng mô tả.

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

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

Điều đó có lẽ nên làm điều đó.

Các vấn đề liên quan