2014-06-25 14 views
5

Tôi cố gắng thiết lập một NSDictionary đến một đối tượng JSON lấy từ máy chủ, tôi làm điều đó trong dòng này:NSJSONSerialization trả "<null>" chuỗi

_peopleArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

Nó hoạt động tốt và đúng cách tạo ra các từ điển . Tuy nhiên, tôi có một vấn đề, giá trị là null trong đối tượng JSON được lưu trữ dưới dạng giá trị chuỗi "<null>" trong từ điển. Có cách nào để sửa lỗi này hoặc làm việc xung quanh nó? Tôi muốn tránh đi qua toàn bộ điều và đặt chúng thành @"".

Cảm ơn bạn đã trợ giúp!

~ Carpetfizz

Trả lời

1

Không có gì tôi đoán là, mặc dù nó có thể dễ dàng điều chỉnh từ các nhà sản xuất api, nếu không thể, bạn luôn có thể đặt một macro đơn giản, tôi sử dụng để tránh điều như vậy, hãy làm theo vĩ mô bên dưới

#define Is_Empty(value) (value == (id)[NSNull null] || value == nil || ([value isKindOfClass:[NSString class]] && ([value isEqualToString:@""] || [value isEqualToString:@"<null>"]))) ? YES : NO 

#define IfNULL(original, replacement) IsNULL(original) ? replacement : original 

#define IsNULL(original) original == (id)[NSNull null] 

#define SafeString(value) IfNULL(value, @"") 

Cách sử dụng

self.label.text=SafeString([dic objectForKey:@"name"]); 
7

Bạn đang sai. giá trị rỗng trong JSON là không phải được lưu trữ dưới dạng < null> giá trị chuỗi. Chúng được lưu trữ dưới dạng các đối tượng NSNull, mà NSLog ghi là < null>.

Bạn không bao giờ có thể tin tưởng dữ liệu nào bạn được cung cấp. Nếu bạn cho rằng bạn có một NSString và máy chủ gửi cho bạn một số, mã của bạn có thể bị lỗi.

NSString* myJSONString = ...; 
if ([myJSONString isKindOfClass:[NSString class]]) { 
    it is a string 
} else { 
    it is not a string 
} 
+0

(thêm một chút thông tin thêm) Không chỉ làm họ NSLog như là một chuỗi, nhưng cũng '[NSString stringWithFormat: @ "% @", nullObj];' sẽ ra '' trong ứng dụng của bạn, mà là lý do tại sao hầu hết mọi người bị lừa bởi gỡ lỗi dataType này. –

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