2012-04-18 6 views
1

다음 코드를 사용하여 JSON 파일을 만듭니다.MacOS에서 JSONP를 만드는 방법은 무엇입니까?

// Some data in keys and vals. 
NSDictionary* dictionary = [NSDictionary dictionaryWithObjects:vals forKeys:keys]; 
NSError* writeError = nil; 
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dictionary 
        options:NSJSONWritingPrettyPrinted error:&writeError]; 
NSString* path = @"json.txt"; 
[jsonData writeToFile:path atomically:YES]; 

JSONP 파일을 어떻게 출력합니까? 사용할 수있는 Cocoa 프레임 워크가 있습니까?

업데이트 : 한편, 나는 빠른 - 및 - 더러운 솔루션을 사용 : 난 그냥 디스크에 이전에 작성된 JSON 파일에 읽고 문자열로 누락 된 JSONP 기능을 추가 할 수 있습니다. 그런 다음 두 번째로 파일을 씁니다. 내 질문에 대한 답이 될 가치가 없다고 생각합니다. 따라서 나는이 질문을 더 똑똑한 해결책으로 열어 두겠다.

+0

디스크에 기록되고 함수 호출에 포장하는 것은 더 많은 것 파일을 디스크에 쓰고 거기에서 다시 읽는 것보다 효율적입니다. – omz

+0

확실히 omz. 답으로 예제 코드를 자유롭게 제공하십시오. – JJD

답변

2

JSON 데이터를 문자열로 변환하고 함수 호출에서 랩핑 한 다음 파일에 쓸 수 있습니다. 예 :

NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dictionary 
                options:NSJSONWritingPrettyPrinted 
                error:NULL]; 
NSMutableString *jsonString = [[[NSMutableString alloc] initWithData:jsonData 
                  encoding:NSUTF8StringEncoding] autorelease]; 
[jsonString insertString:@"functionCall(" atIndex:0]; 
[jsonString appendString:@");"]; 
[jsonString writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 

(I 더 나은 메모리 효율성 여기 변경 가능한 문자열을 사용하고 있습니다.) 그것은 _before_ 문자열로`jsonData` 변환

+0

니스. NSString에 writetoFile : selector가 있다는 것을 처음부터 보지 못했습니다. 고마워! – JJD

0

나는 objective-c 나 Cocoa를 모른다. (저는 JSON 응답을 만들기 위해 MacOS에서 파이썬을 사용합니다),하지만 그렇게하는 것이 간단합니다.

가 까다로운 부분은 함수 이름 "functionCall은"브라우저 및 AFAIK 설정되어
functionCall({"Name": "Foo", "Id" : 1234, "Rank": 7}); 

해당 쿼리 매개 변수의 이름은 다음과 같습니다 기본 개념은 자바 스크립트 함수 호출에서 JSON 데이터를 래핑하는 것입니다 표준화되지 않았습니다. jQuery는 jsonCallback을 사용합니다. 다른 사용자는 json 또는 콜백을 사용합니다. 따라서 요청 URL은 해당 콜백 이름에 대해 검사되어야하며 해당 함수 이름을 사용하여 json 데이터를 래핑해야합니다.

+0

미안하지만 에릭,하지만 그 개념에 문제 없습니다. 문제는 Objective-C로 JSONP를 수행하는 방법이다. – JJD

관련 문제