1

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

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

我正在尝试解析对象的标签“消息”和“图片”

"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"]];*/
}
4

3 回答 3

2

在行中:

jsonArray = [jsonData objectFromJSONString];

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

这与您的 jsonArray 或 item 是字典以及您将值存储在字典中无关。它与以下方法返回什么有关:

[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"]];
    }

}             

并非每个字典都包含键 - “消息”。它存在于数组的第二个字典中。

于 2012-07-11T06:15:47.603 回答
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字典中获取对象。

于 2012-07-11T06:14:37.717 回答
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

于 2012-07-11T07:52:19.063 回答