2014-02-16 3 views
1

내 WordPress 블로그에서 JSON 피드를 구문 분석하려고합니다. 사용하려는 사용자 정의 필드가 있지만 SBJson과 작동하도록 설정할 수는 없습니다. 내 피드가 어떻게 보이는지 (다른 쓸모없는 것들은 제거했습니다) :iOS SBJson 요청이 잘못되었습니다.

{ 
    "status":"ok", 
    "count":27, 
    "count_total":2552, 
    "pages":95, 
    "posts":[ 
     { 
     "id":8978, 
     "type":"post", 



     "custom_fields":{ 

     "btnNameScrollBlog":[ 
      "<null>" 
     ] 
     "author-name":[ 
      "John Doe" 
     ] 
    }, 
} 

저자명을 얻으려고합니다. 여기에 내가 iOS에서 피드를 얻기 위해 사용되는 코드는 다음과 같습니다

-(void)downloadRecentPostJson{ 

    [recentPost removeAllObjects]; 
    [previous_total_per_page removeAllObjects]; 


    NSURL *urls = [NSURL URLWithString:[NSString stringWithFormat:@"%@/?json=%@",url,methodJson]]; 
    NSData *sa = [NSData dataWithContentsOfURL:urls]; 
    NSString *jsonString = [[NSString alloc] initWithData:sa encoding:NSUTF8StringEncoding]; 


    NSDictionary *result = [jsonString JSONValue]; 
    NSArray* posts = [result objectForKey:@"posts"]; 
    total_page = [[result objectForKey:@"pages"] intValue]; 
    total_post_per_page = [[result objectForKey:@"count"] intValue]; 

    [previous_total_per_page addObject:[result objectForKey:@"count"]]; 

    current_page = 1; 

    for (NSDictionary *post in posts) { 
     id custom = [post objectForKey:@"custom_fields"]; 
     id thumbnail = [post objectForKey:@"thumbnail"]; 
     NSString *featuredImage = @""; 
     if (thumbnail != [NSNull null]) 
     { 
      featuredImage = (NSString *)thumbnail; 
     } 
     else 
     { 
      featuredImage = @"0"; 
     } 





     [recentPost addObject:[NSArray arrayWithObjects:[post objectForKey:@"id"],[post objectForKey:@"title_plain"],[post objectForKey:@"excerpt"],featuredImage,[post objectForKey:@"content"],[post objectForKey:@"date"],[post objectForKey:@"comments"],[post objectForKey:@"comment_status"],[post objectForKey:@"scrollBlogTemplate"],[post objectForKey:@"url"],[post objectForKey:@"specialBtn"],[post objectForKey:@"btnNameScrollBlog"],[post objectForKey:@"latScrollBlog"],[post objectForKey:@"longScrollBlog"],[post objectForKey:@"openWebUrlScrollBlog"],[post objectForKey:@"gallery"], [custom objectForKey:@"author-name"], nil]]; 

    } 

내가 custom_fields이 ID로 개체를 설정하려고 : ID 사용자 정의 = [포스트 objectForKey : @ "custom_fields"]; 저자의 이름을 얻기 위해 그것을 사용

그리고 : [사용자 정의 objectForKey : "저자 이름"@]

하지만 '이유 :'는 NSInvalidArgumentException 얻을 - [__ NSArrayM rangeOfString :] : 인식 할 수없는 선택 오류 .

제안 사항

게시물에서 카테고리 제목을 가져 오려면 어떻게해야합니까?

"categories": [ 
       { 
        "id": 360, 
        "slug": "deals", 
        "title": "Deals", 
        "description": "", 
        "parent": 0, 
        "post_count": 28 
       } 
      ], 

범주를 다음과 같은 배열로 배치합니까? 그 제목을 어떻게 얻을 수 있습니까? 나는 이것을 시도하고 인덱스 3에서 객체를 얻었지만 오류가 발생했습니다.

NSArray *cat = [post objectForKey:@"categories"]; 
+3

오류 메시지가 "저자 이름"는있는 NSArray이지만이있는 NSString 것처럼 코드를 치료하는 것을 의미한다. – Anna

+0

Json의 형식이 올바르지 않습니다. http://jsonlint.com/을 사용해보십시오. – Hakim

답변

3

은 배열을 문자열로 취급한다는 의미입니다. 귀하의 코드는 거의 정확, 당신은 단지 (바람직 배열이 비어 있지 않은지 검사 포함) 배열에서 첫 번째 항목을 얻을

"author-name":[ 
    "John Doe" 
] 

한 문자열을 포함하는 배열이기 때문에 할 필요가있다. 그래서 :

NSArray *names = [custom objectForKey:@"author-name"]; 
NSString *name = [names firstObject]; 

NSArray *categories = [custom objectForKey:@"categories"]; 
NSDictionary *category = [categories firstObject]; 
NSString *title = [category objectForKey:@"title"]; 
+0

맞았습니다. 고마워요! –

+0

카테고리 제목과 함께 도와 주시겠습니까? 혼란스러워. –

+0

어디에 중첩되어 있습니까? 다시 배열에 들어 있으므로 배열에 색인을 생성하여 사전을 가져와 키를 사용해야합니다. – Wain

관련 문제