Tôi đang sử dụng dịch vụ API của dịch vụ web và được viết trong mô tả của họ rằng họ gửi dữ liệu JSON cũng khớp với ý kiến của tôi với phản hồi tôi nhận được từ đó. Dưới đây là một phần của nó mà tôi nhận được từ các NSURLConnection-Đại biểu (kết nối didReceiveData: (NSData *) dữ liệu) và chuyển đổi trong một NSString sử dụng:Chuyển đổi JSON NSData thành NSDictionary
NSLog(@"response: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
Đây đoạn:
{"scans":
{
"Engine1“:
{
"detected": false,
"version": "1.3.0.4959",
"result": null,
"update": "20140521"
},
"Engine2“:
{
"detected": false,
"version": "12.0.250.0",
"result": null,
"update": "20140521"
},
...
},
"Engine13":
{
"detected": false,
"version": "9.178.12155",
"result":
Trong NSLog-String nó dừng lại ở đó. Bây giờ tôi muốn biết từ bạn whats sai mà tôi không thể chuyển đổi dữ liệu này cho một người điển JSON với dòng mã này:
NSError* error;
NSMutableDictionary *dJSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
tôi thử nghiệm với một số tùy chọn nhưng lúc nào cũng báo lỗi tương tự:
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)"
(Unexpected end of file while parsing object.) UserInfo=0x109260850 {NSDebugDescription=Unexpected end of file while parsing object.}
Mọi thứ đều chỉ ra rằng gói JSON không đầy đủ nhưng tôi không biết cách kiểm tra nó hoặc cách tìm kiếm vấn đề cần được đặt trong mã của tôi.
có vẻ như API đang gửi dữ liệu chưa hoàn chỉnh hoặc cắt ngắn. Không có gì bạn có thể làm được. –
Bạn không thể chuyển đổi nó vì nó không đầy đủ. Bạn đang cố gắng chuyển đổi nó trong didReceiveData: hoặc trong connectionDidFinishLoading :? Nếu nó trong didReceiveData thì nó sẽ không đầy đủ nếu HTTP đã phân chia nó và bạn phải chuyển đổi nó trong connectionDidFinishLoading sau khi bạn đã tập hợp lại nó. – Gruntcakes
Có @ MartinH bạn đúng và tôi đã làm như Rajeev đã viết trong câu trả lời của mình quá! Cảm ơn nhiều! – user3191334