2010-02-10 8 views
5

Tôi đang đọc dữ liệu chuỗi từ PLIST mà tôi đang sử dụng để tạo chuỗi JSON (tình cờ sử dụng trong Facebook Connect).Phân tích cú pháp NSStrings để đảm bảo chuỗi JSON được định dạng chính xác trong XCode

NSString *eventLink = [eventDictionary objectForKey:EVENT_FIND_OUT_MORE_KEY]; 
NSString *eventLinkEscaped = [eventLink stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString *eventName = [eventDictionary objectForKey:EVENT_NAME_KEY]; 
NSString *eventDescription = [eventDictionary objectForKey:@"Description"]; 
NSString *eventImageAddress = [eventDictionary valueForKey:@"Image URL"]; 
if ([eventImageAddress length] == 0) 
{ 
    eventImageAddress = NO_EVENT_IMAGE_URL; 
} 
// Publish a story to the feed using the feed dialog 
FBStreamDialog *facebookStreamDialog = [[[FBStreamDialog alloc] init] autorelease]; 
    facebookStreamDialog.delegate = self; 
    facebookStreamDialog.userMessagePrompt = @"Publish to Facebook"; 
    facebookStreamDialog.attachment =[NSString stringWithFormat: @"{\"name\":\"%@\",\"href\":\"%@\",\"description\":\"%@\",\"media\":[{\"type\":\"image\",\"src\":\"%@\",\"href\":\"%@\"}]}", eventName, eventLinkEscaped, eventDescription, eventImageAddress, eventLinkEscaped]; 
[facebookStreamDialog show]; 

Tất cả điều này hoạt động tốt, nhưng một số mô tả sự kiện nhất định (4 trong số khoảng 150) văn bản xuất hiện trong hộp thoại trống. Câu hỏi của tôi là, có một cuộc gọi phương thức dễ dàng, chẳng hạn như stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding sẽ đảm bảo rằng bất kỳ ký tự tinh quái nào được thoát hay bỏ qua?

Cảm ơn trước,

Dave

+0

Thực tế về điều tra thêm, biểu tượng bản quyền là không đúng, đó là LF/CR thực tế trong văn bản cho 2 sự kiện và "ký tự cho sự kiện khác 2. –

Trả lời

2

tôi không nghĩ rằng có một cách dễ dàng để thoát khỏi chuỗi vấn đề. Nếu bạn cần hỗ trợ JSON bất cứ nơi nào khác trong mã của bạn, hãy xem xét sử dụng một trong những hiện Các khung công tác phân tích cú pháp/máy phát JSON như yajl-objc hoặc SBJSON. Một trong hai tùy chọn này sẽ cho phép bạn tạo câu trả lời của mình như các đối tượng Foundation (NSArray/NSDictionary) và sau đó gọi một phương thức duy nhất để tạo JSON thích hợp. Mã của bạn sẽ sạch hơn và bạn có lợi ích là cả hai khung này đều được kiểm tra kỹ lưỡng.

Nếu chỉ cần tạo một bit JSON này, đặt cược tốt nhất của bạn có thể là tự đi qua các chuỗi đầu vào, thay thế các ký tự có vấn đề tiềm ẩn bằng các phiên bản thoát thích hợp. Không phải là xấu như bạn nghĩ. Hãy xem mã nguồn của SBJsonWriter

+0

Cảm ơn bạn. . –