2011-09-02 5 views
4

웹 서비스에서 큰 JSON 문자열 (11MB)이 나타납니다. JSONKit을 사용하여 데이터를 파싱하면 내 앱이 70MB에 도달하고 메모리 경고가 발생하며 앱이 다운됩니다.iOS에서 대량의 JSON 데이터 구문 분석

어떻게이 데이터를 구문 분석 할 수 있습니까?

+2

11메가바이트는이 모바일 플랫폼 고려 특히 JSON 데이터 세트에 대한 미친 듯이 대형 아이오와. – Nick

답변

3

가장 쉬운 방법은 서버에서받는 json 크기를 줄이는 것입니다. 그럴 수 없다면 거대한 JSON을 구문 분석하는 유일한 방법은 게으른 평가를 사용하는 것입니다.

lazy evaluation을 지원하는 objective-c 용 JSON lib가 있다고 생각하지 않습니다. 그러나 당신은 하나를 구현할 수 있습니다.

+0

감사합니다, 어떤 해결책을 찾으면 알려주세요. – aViNaSh

+1

SBJson은 데이터 스트림 읽기를 지원합니다. 즉, 한 번에 전체 문서를 메모리에로드 할 필요가 없습니다. (면책 조항 : 나는 그 저자 다.) –

1

11메가바이트는 largedata과 솔루션은 JSON 지원 iOS의 네이티브 수없는 데이터의 사이즈를 최소화하기 위해 전용이지만,이 정확한 목적을위한 좋은 프레임 워크가 : http://code.google.com/p/json-framework/

이 프레임 워크는 원시에서 변환을 지원은 JSON 객체를 Objective-C 객체 (NSArray, NSDictionary)로 또는 그 반대로 변환합니다.

3

가장 좋은 방법은 이벤트 구동 파싱을 ​​지원하는 YAJL JSON 파서를 보는 것입니다. 그런 다음 JSON을 데이터 피드에서 파싱 할 때 구문 분석 할 수 있으며 모든 것을 한 번에 메모리에 저장할 필요가 없습니다.

https://github.com/gabriel/yajl-objc

죄송합니다, 나는 실제로이 사용 방법을 설명하는 코드 예제 모르겠어요.

2

SBJson은 데이터 스트림의 구문 분석을 지원합니다. 이렇게하면 문서를 조금씩 처리 할 수 ​​있으므로 전체 문서를 들지 않아도됩니다. 배포판에는 이것을 사용하는 방법의 두 가지 예가 들어 있습니다. 먼저 StreamParserIntegrationTest.m이 있고 그 다음에 TweetStream 데모 응용 프로그램이 있습니다. 하루 종일 HTTP 스트림을 앉아서 구문 분석하여 들어 오면 각 트윗을 표시 한 다음 버릴 수있는 트위터 응용 프로그램입니다.

(면책 조항 :. 내가 SBJson의 저자입니다)