2012-11-21 116 views
3

我试图解析Twitter API接收到的JSON字符串以获取用户时间轴。 我正在使用Jastor将JSON响应转换为目标c对象。直到我尝试分析实体对象ios Twitter API JSON解析

entities = { 
     hashtags =(); 
     media = (
       { 
       "display_url" = "pic.twitter.com/..."; 
       "expanded_url" = "http://..."; 
       id = ...; 
       "id_str" = ...; 
       indices =(
        5, 
        25 
       ); 
       "media_url" = "http://..."; 
       "media_url_https" = "https://..."; 
       sizes ={ 
        large ={ 
         h = 765; 
         resize = fit; 
         w = 1024; 
        }; 
        medium ={ 
         h = 448; 
         resize = fit; 
         w = 600; 
        }; 
        small ={ 
         h = 254; 
         resize = fit; 
         w = 340; 
        }; 
        thumb ={ 
         h = 150; 
         resize = crop; 
         w = 150; 
        }; 
       }; 
       type = photo; 
       url = "http://..."; 
      } 
     ); 
     urls =(); 
     "user_mentions" =(); 
    }; 

即使JSON是不是标准Jastor似乎解析所有的,但此块由于“(”“),”存在 一切工作正常。 你知道如何让Jastor解析这个块吗?或者我必须改变图书馆?

谢谢。

+0

你可以发布你得到的整个JSON块吗? – ale0xB

回答

8

你的问题的输出是好奇的是,它不是一个JSON格式的字符串。它看起来像是将一个JSON字符串转换为Objective-C对象时典型的NSDictionaryNSArray对象的嵌套组合。当你使用这种对象时,花括号表示NSDictionary对象,括号表示NSArray对象。

因此,它看起来像你正在显示一个典型的,成功解析的JSON对象。您可以按如下破译它,假设是通过做一些NSDictionary叫,说一个NSLog产生上面的输出,jsonObject

NSDictionary *entity = [jsonObject objectForKey:@"entities"]; 
NSArray *media  = [entity objectForKey:@"media"]; 
NSDictionary *media0 = [media objectAtIndex:0]; 
NSString *display_url = [media0 objectForKey:@"display_url"]; 
NSArray *sizes  = [media0 objectForKey:@"sizes"]; 
NSDictionary *size0 = [sizes objectAtIndex:0]; 

,或者,如果用现代的目标C,简单地说:

NSDictionary *entity = jsonObject[@"entities"]; 
NSArray *media  = entity[@"media"]; 
NSDictionary *media0 = media[0]; 
NSString *display_url = media0[@"display_url"]; 
NSArray *sizes  = media0[@"sizes"]; 
NSDictionary *size0 = sizes[0]; 

1

为什么不使用iOS 5.0中的新功能NSJSONSerialization,它将JSON数据转换为NSArray或NSDictionary等Objective C标准。

NSString *stringURL = [NSString stringWithFormat:@"%@?%@", kTwitterApi, kParams]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:stringURL]]; 
request.HTTPMethod = @"GET"; 

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 

    if (error) { 
     NSLog(@"Error%@", error.localizedDescription); 
    }else { 
     NSError *err; 
     NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&err]; 

     NSLog(@"%@", json); 
    } 

}]; 
+0

这正是我所做的。我使用NSJSONSerialization将JSON转换为NSArray(的NSDictionary)。 我用来代表推文的Obj C类(Tweet)是Jastor的子类,所以一旦我有了NSDictionary,我所要做的就是 Tweet * t = [[Tweet alloc] initWithDictionary:dic];获取对象。 – lontra

+0

我明白了..虽然从未使用过自动模型构建器。总是自己创建模型逻辑以避免错误和错误,并支持我的对象中的所有NSCoding功能。 – pbibergal