-2

我正在尝试使用http://reddit.com/.json文件将 reddit frot 页面中的每个标题放入一个数组中。我在另一个站点上使用了相同的代码来返回只出现一次的东西。因为“标题”多次出现,所以我需要将每个都放入一个数组中。

- (void)fetchedData:(NSData *)responseData {
    //parse out the json data
    NSError *error;
    NSDictionary *json = [NSJSONSerialization
                      JSONObjectWithData:responseData                      
                                 options:kNilOptions
                                   error:&error];

    NSMutableArray *latestTitles = [json objectForKey:@"title"];

    NSLog(@"titles: %@", latestLoans); 
}

我认为这应该可行,但我编译标题:(null)

4

1 回答 1

1

看起来您正在查看根对象,并期待一系列标题,但事实并非如此。

您的代码适用于这种 JSON 结构:

{
  "titles":[
    "Some Title",
    "Another Title",
  ]
}

不幸的是,这不是http://reddit.com/.json提供的。它看起来更像这样:

{
  data: {
    children: [
      {
        data: {
          // other data...
          title: "Some Title"
        }
      }, {
        data: {
          // other data...
          title: "Another Title"
        }
      }
      // other objects...
    ]
  }
}

您会注意到没有标题数组。相反,有一个对象数组,每个对象都有一个title属性。

然后,您可以遍历该结构,并构建一个标题数组。

NSArray *objects = [[json objectForKey:@"data"]
                            objectForKey:@"children"];

NSMutableArray *titles = [[NSMutableArray alloc] init];

for (NSDictionary *object in objects) {
  NSString *title = [[object objectForKey:@"data"]
                               objectForKey:@"title"];
  [titles addObject:title];
}

NSLog(@"titles: %@", titles);

您必须横向 JSON 结构。JSON 中没有等效于 XML 的 XPATH。您必须从根开始钻取对象,直到获得所需的数据。不管你信不信,它很简单,真的很棒。

于 2013-05-09T00:53:29.120 回答