将.json“titles”转换为Array IOS

时间:2013-05-09 00:34:01

标签: ios objective-c json cocoa-touch

我正在尝试使用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)

1 个答案:

答案 0 :(得分: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。您必须从根目录钻取对象,直到获得所需的数据。它的简单就像是信不信由你真的很棒。