2013-04-16 31 views
5
{"User":{"id":"42","name":"martin"}} 

Chuyển đổi NSData tôi để NSString trả về JSON này mà có vẻ hoàn toàn hợp lệ, tuy nhiên phương pháp:NSJSONSerialization trở về con số không

[NSJSONSerialization isValidJSONObject:data] 

đang nói đây không phải là một đối tượng JSON hợp lệ.

Có ai có thể chỉ ra một sai lầm mà tôi đã thực hiện hoặc nghĩ ra lý do tại sao điều này xảy ra?

Trả lời

9

Tôi đặt cược có một ký tự không thể in trong chuỗi của bạn chẳng hạn, làm cho dữ liệu không hợp lệ.

Khai báo một biến NSError* error sau đó gọi [NSJSONSerialization JSONObjectWithData:data options:0 error:&error] phương pháp để cố gắng chuyển đổi JSON: rõ ràng là nếu dữ liệu của bạn được coi là không hợp lệ, nó sẽ trở lại nil, nhưng ít nhất bạn sẽ có các mô tả về những gì là sai trong NSError* error biến sau đó.

NSData* data = ... // your data 
NSError* error = nil; // Declare a variable to hold the error upon return 
id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; // Try to convert your data 
NSLog(@"obj: %@ ; error: %@", error); // Log the decoded object, and the error if any 
+0

Tôi đặt lỗi và nó nói null, bằng cách nào đó nó đột nhiên hoạt động ... lạ ... dù sao nó hoạt động ngay bây giờ! – Alex

+0

Tôi đã có cùng một vấn đề và tôi nhận được: '(Ký tự kiểm soát không thoát xung quanh ký tự 43579.) UserInfo = 0x9b78e30 {NSDebugDescription = Ký tự điều khiển không thoát xung quanh ký tự 43579.}'. Làm thế nào để tôi sửa chữa nó? – marciokoko

+0

Khắc phục dữ liệu gốc JSON của bạn. Tôi đặt cược JSON bạn đang cố gắng giải mã không phải là dữ liệu JSON hợp lệ lúc đầu và có một ký tự không hợp lệ tại offset 43579, như lỗi giải thích. Dán JSON của bạn vào http://jsonlint.org/ để kiểm tra xem nó có phải là JSON không hợp lệ hoặc không đúng định dạng. Nếu nó không phải là JSON hợp lệ, bạn rõ ràng cần phải sửa nó ở nguồn _ (sửa nội dung của 'file.json' nếu bạn đang đọc' NSData' từ một tệp như vậy, hoặc sửa chuỗi được tạo ra bởi Máy chủ Web của bạn nếu nó một Dịch vụ Web trả về JSON này cho ứng dụng của bạn vào 'NSData' này, v.v.) _ – AliSoftware