2010-02-10 2 views
5

JSON 문자열을 생성하는 데 사용하는 PLIST에서 문자열 데이터를 읽는 중입니다. (부수적으로 Facebook Connect에서 사용하기 위해).NSString을 구문 분석하여 Xcode 내에서 올바르게 구성된 JSON 문자열을 확인하십시오.

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]; 

이 모든 기능은 제대로 작동하지만 대화 상자에 나타나는 텍스트가 공백 인 특정 이벤트 설명 (약 4 개 중 4 개)이 있습니다. 명백한 후보자를 찾았습니다. 즉, 설명에 "문자 또는 인스턴스가 포함되어 있습니다. 저작권 기호가 있습니다. 제 질문은 stringByAddingPercentEscapesUsingEncoding과 같은 쉬운 메서드 호출이 있습니까? NSUTF8StringEncoding은 모든 도기 문자가 이스케이프되거나 무시되도록합니다. 사전에

감사합니다,

데이브

+0

사실 더 자세한 조사에서 저작권 기호는 실제로 2 개의 이벤트와 "2의 문자"에 대한 텍스트에서 잘 나타났습니다. –

답변

2

내가 문제 문자열을 탈출 할 수있는 쉬운 방법이라고 생각하지 않습니다. 당신은 당신의 코드에서 다른 곳 JSON의 지원이 필요한 경우, 기존 중 하나를 사용하는 것이 좋습니다 yajl-objc 또는 SBJSON과 같은 JSON 구문 분석/생성기 프레임 워크.이 두 가지 중 하나를 사용하면 응답을 구성 할 수 있습니다. (NSArray/NSDictionary)로 설정하고 적절한 JSON을 생성하는 단일 메서드를 호출합니다. 코드가 더 깨끗해지며 두 프레임 워크 모두 잘 테스트 된 이점이 있습니다.

JSON 1 비트를 생성하기 만하면 잠재적으로 문제가되는 문자를 적절하게 이스케이프 된 버전으로 대체하여 수동으로 입력 문자열을 건너 뛸 수 있습니다. 생각만큼 나쁘지 않은가. SBJsonWriter

+0

Cheers Dave . –