错误解析ios中的facebook json feed

时间:2012-07-11 05:12:22

标签: objective-c xcode json

我正在查询Facebook公共JSON Feed。我收到了一个错误:

  

- [__ NSCFString objectForKey:]:无法识别的选择器发送到实例0x9146b90 2012-07-11 10:32:25.536 iB Top 50 [1789:16a03]

我正在尝试使用

解析对象的标签“message”和“picture”
"id": "108448345915250_320180984741984"

请帮帮我。

示例JSON:

{
"data": [
  {
     "id": "108448345915250_320181064741976",
     "from": {
        "name": "Amitabh Bachchan",
        "category": "Actor/director",
        "id": "108448345915250"
     },
     "story": "Amitabh Bachchan edited his Website and Location.",
     "story_tags": {
        "0": [
           {
              "id": 108448345915250,
              "name": "Amitabh Bachchan",
              "offset": 0,
              "length": 16,
              "type": "page"
           }
        ]
     },
     "type": "status",
     "created_time": "2012-07-10T05:30:10+0000",
     "updated_time": "2012-07-10T05:30:10+0000",
     "comments": {
        "count": 0
     }
  },
  {
     "id": "108448345915250_320180984741984",
     "from": {
        "name": "Amitabh Bachchan",
        "category": "Actor/director",
        "id": "108448345915250"
     },
     "message": "Singing in the praises of this new venture \u2026 metal mike and all \u2026",
     "picture": "http://photos-d.ak.fbcdn.net/hphotos-ak-snc7/293763_320180974741985_675837103_s.jpg",
     "link": "http://www.facebook.com/photo.php?fbid=320180974741985&set=a.126948684065216.26767.108448345915250&type=1&relevant_count=1",
     "icon": "http://static.ak.fbcdn.net/rsrc.php/v2/yz/r/StEh3RhPvjk.gif",
     "type": "photo",
     "object_id": "320180974741985",
     "created_time": "2012-07-10T05:29:34+0000",
     "updated_time": "2012-07-10T,
          "shares": {
        "count": 41
     },
     "likes": {
        "data": [
           {
              "name": "Amir Samy",
              "id": "100000377429168"
           },
           {
              "name": "Rashi Shrivastava",
              "id": "100001002346693"
           },
           {
              "name": "Satish Wakpaijan",
              "id": "100002129452923"
           },
           {
              "name": "Sushil Kumar",
              "id": "100002105808620"
           }
        ],
        "count": 300
     },
     "comments": {
        "count": 45
     }
  },
  ...

iOS代码:

jsonurl=[NSURL URLWithString:@"https://graph.facebook.com/TheAmitabhBachchan/posts?access_token=AcessToken"];

jsonData=[[NSString alloc]initWithContentsOfURL:jsonurl];

jsonArray = [jsonData objectFromJSONString]; 

items = [jsonArray objectForKey:@"data"];

story = [NSMutableArray array];
title = [NSMutableArray array];
picture = [NSMutableArray array];

for (NSDictionary *item in items )
{
    [story addObject:[item objectForKey:@"message"]];
   /* [title addObject:[item objectForKey:@"name"]];
    [picture addObject:[item objectForKey:@"picture"]];*/
}

3 个答案:

答案 0 :(得分:2)

在行中:

jsonArray = [jsonData objectFromJSONString];

您从获取的JSON字符串中获取对象。您必须将JSON字符串转换为正确的值。为此使用SBJSON解析器。

这不是关于你的jsonArray或item是一个字典,你将值存储在dictionary.Its中关于以下方法返回的内容:

[jsonData objectFromJSONString];
[item objectForKey:@"message"];

是(jsonArray和item)字典吗?其中一个是NSString,因为你的错误说明了。正确地解析了JSON值。

然后检查一下:

NSString *sss = @"https://graph.facebook.com/TheAmitabhBachchan/posts?access_token=393411130717153%7C1HFhZAByEHp89q6CPECJTFzuzfg";
NSURL * jsonurl=[NSURL URLWithString:[sss stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData* data = [NSData dataWithContentsOfURL: jsonurl];
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data 
                                                     options:kNilOptions 
                                                       error:nil];
NSArray *items = [json objectForKey:@"data"];
// NSDictionary *item = [items objectAtIndex:1];

NSMutableArray *story = [NSMutableArray array];

for (NSDictionary *item in items )
{

    if([item objectForKey:@"message"] || [item objectForKey:@"message"] != nil || [[item objectForKey:@"message"] length]>0){
        [story addObject:[item objectForKey:@"message"]];
    }

}             

并非每个字典都包含密钥 - “message”。它出现在数组的第二个字典中。

答案 1 :(得分:1)

NSURL * jsonurl=[NSURL URLWithString:@"https://graph.facebook.com/TheAmitabhBachchan/posts?access_token=AcessToken"];
 NSData* data = [NSData dataWithContentsOfURL: jsonUrl];
 NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data 
                                                     options:kNilOptions 
                                                       error:nil];
NSDictionary *items = [json objectForKey:@"data"];

这必须奏效。现在,您可以从items字典中获取对象。

答案 2 :(得分:1)

实际上它是一个非常糟糕的格式json,我亲自测试了这个

 NSURL *jsonurl1=[NSURL URLWithString:@"https://graph.facebook.com/TheAmitabhBachchan/posts?access_token=393411130717153%7C1HFhZAByEHp89q6CPECJTFzuzfg"];

NSString *jsonData=[[NSString alloc] initWithContentsOfURL:jsonurl1];
NSDictionary *jsonArray = [jsonData objectFromJSONString]; 
NSLog(@"Js %@", [jsonArray objectForKey:@"data"]);

NSMutableArray *ar = [[NSMutableArray alloc] init];
[ar addObject:[jsonArray objectForKey:@"data"]];

NSLog(@"AAAA %@", [[[ar objectAtIndex:0] objectAtIndex:1] objectForKey:@"picture"]);

,输出

2012-07-11 13:20:41.987 InstagramDemp [4834:f803] AAAA http://photos-d.ak.fbcdn.net/hphotos-ak-snc7/293763_320180974741985_675837103_s.jpg