2011-03-13 7 views
2

iOS에서 JSON 파서로 놀고 있습니다. (간단한) 예제로 잘 작동합니다. 하지만이 일이 실제로이 같은 더 복잡한 일 (조금)는 트위터 동향 JSON, 구문 분석하는 방법을 궁금해했다 :Twitter 구문 분석 Twitter에서 JSON 피드

{ 
    "trends": { 
     "2011-03-13 11:42:17": [ 
      { 
       "events": null, 
       "query": "Fukushima", 
       "promoted_content": null, 
       "name": "Fukushima" 
      }, 
      { 
       "events": null, 
       "query": "Rebecca Black", 
       "promoted_content": null, 
       "name": "Rebecca Black" 
      }, 
      { 
       "events": null, 
       "query": "Pearl Harbour", 
       "promoted_content": null, 
       "name": "Pearl Harbour" 
      }, 
      ... 
      { 
       "events": null, 
       "query": "Magdalena Neuner", 
       "promoted_content": null, 
       "name": "Magdalena Neuner" 
      } 
     ] 
    }, 
    "as_of": 1300016537 
} 

가 어떻게 그냥 처음 3 개 쿼리를 반환을? 이 경우 : 후쿠시마, 레베카 블랙펄 하버. 하지만 훨씬 간단 피드

for (int i = 0; i < [luckyNumbers count]; i++) 
    [text appendFormat:@"%@\n", [luckyNumbers objectAtIndex:i]]; 

이것은 그것은 내가 무엇을 찾고에 대한 동일한 방식으로 접근 할 수 있습니다 예제 코드를 사용하여

,이 같은 간다?


편집 지금 "쿼리"의 값을 반환하는 것을 시도하고있다

는 :

NSLog(@"%@", [[luckyNumbers objectForKey:@"trends"]); 

물론이 내용을 기록합니다

그래서 난`이 일 핵심 "트렌드", 어떻게 추세의 첫 번째 (그리고 유일한) 키를 반환 할뿐만 아니라 "쿼리"의 내용을 반환하기 위해 하나 더 레벨을 내려야합니까 ?? - 그 (XML 대) 그것의 요점

NSString *date = [[[luckyNumbers valueForKeyPath:@"trends"] allKeys] description]; 
NSArray *trends = [luckyNumbers objectForKey:@"trends"]; 
NSLog(@"%@", [trends valueForKeyPath:date]); 

하지만 이동 ... 사전 및 배열에 같은 위해 같은

답변

0

JSON지도 :

나는이 뭔가를 시도했습니다. 특정 JSON 파일에서 정보를 얻는 방법은 파일이 처음에 어떻게 설계되었는지에 달려 있습니다.

JSON의 대괄호는 배열을 나타냅니다. 중괄호는 사전 (개체)을 나타냅니다. 그래서 당신의 예제에서 우리는 키 'trends'를 가진 객체를 포함하고있는 사전이 있다는 것을 보았습니다, 그 자체가 사전입니다.

NSArrays와 NSDictionaries의 전체 구조를 볼 수 있기 때문에 파싱 된 배열의 결과를 로그하면 더 쉽게 처리 할 수 ​​있습니다. 당신이 당신의 JSON을 구문 분석 한 후이 작업을 수행하려면, 당신은 같은 것을 할 싶어 : 그것은 당신이 사용하고있는 JSON 파서에 따라

NSLog([parsedJsonResult description]);

+0

콘솔은 유용한 구문 분석 출력을 제공하지만 키 "경향"에서 사전을 어떻게 반환 할 수 있습니까? –

+0

파서가'results'라는 사전 객체를 반환한다고 가정하면'[results objectForKey : @ "trends"]'를 원할 것입니다. – lxt

+0

실제로 그 예제에서 "query"의 값을 반환하려고하는데, objectForKey를 살펴야합니까? –

1

.

document parser을 사용하면 의 dicts 및 배열을 얻을 수 있습니다. 원하는 정보를 추출하려면 문서 구조을 알아야합니다. 정규 메커니즘 (for 루프, 열거 자, 술어 등)

문서가 매우 큰 경우 yajl과 같은 SAX 스타일 구문 분석기가 필요할 수 있습니다. 파싱 ​​될 때 각 종류의 객체를 소비하는 메소드를 정의 할 수 있습니다. 당신이 찾고있는 것을 얻 자마자 (3 개의 쿼리 또는 무엇이든) 당신은 파싱을 중단합니다. 더 빠르며 메모리를 덜 소모합니다.하지만 좀 더 복잡합니다.