2011-02-09 53 views
0

我试图使用JSON框架和OBJ-C无法读取使用的OBJ-C

{ 
Sections =  { 
    Now = "Wednesday 9 February 2011 02:40"; 
    Section =   (
        { 
      Article =     (
            { 
        Exceprt = "text here"; 
        ID = 49011; 
        Title = "text here"; 
        Type = Politics; 
        audioCounter = 0; 
        commentsCounter = 0; 
        hasMore = false; 
        important = False; 
        likesCounter = 0; 
        photoCounter = 0; 
        time = "21:12"; 
        timeStamp = "2/8/2011 9:14:16 PM"; 
        timeStatus = True; 
        videoCounter = 0; 
        viewsCounter = 0; 
       }, 
            { 
        Exceprt = "text here"; 
        ID = 49010; 
        Title = "text here"; 
        Type = Politics; 
        audioCounter = 0; 
        commentsCounter = 0; 
        hasMore = false; 
        important = True; 
        likesCounter = 0; 
        photoCounter = 0; 
        time = "20:45"; 
        timeStamp = "2/8/2011 9:10:59 PM"; 
        timeStatus = True; 
        videoCounter = 0; 
        viewsCounter = 0; 
       }, 
            { 
        Exceprt = "text here"; 
        ID = 49008; 
        Title = "text here"; 
        Type = Politics; 
        audioCounter = 0; 
        commentsCounter = 0; 
        hasMore = false; 
        important = False; 
        likesCounter = 0; 
        photoCounter = 0; 
        time = "20:28"; 
        timeStamp = "2/8/2011 9:09:44 PM"; 
        timeStatus = True; 
        videoCounter = 0; 
        viewsCounter = 0; 
       } 
      ); 
      ID = 22; 
      Name = "EN Live"; 
      totalNews = 3416; 
     } 
    ); 
}; 
} 

我的目的是让字典的文章的列表(列表阅读以下JSON对象JSON对象),以便我稍后可以轻松访问它们。我一直坚持这一点,我的代码给我一个关于调用NSArray不存在的方法的错误,这导致我怀疑我误解了json对象。我对此完全陌生,任何帮助都非常感谢。

这里是我的代码:

NSDictionary *results = [jsonString JSONValue]; 
NSDictionary *Articles = [[results objectForKey:@"Sections"] objectForKey:@"Section"]; 
NSArray *ListOfArticles = [Articles objectForKey:@"Article"]; 

for (NSDictionary *article in ListOfArticles) 
{ 

    NSString *title = [article objectForKey:@"Title"]; 
    NSLog(title); 
} 

谢谢!

+0

One note:Exceprt is misspelt。正确的拼写是摘录。 – 2011-02-09 01:11:23

+0

好眼睛!不幸的是,我无法控制:) – Pepe 2011-02-09 01:15:09

回答

1

首先,那些不是有效的JSON数据。名称(名称/值对)是字符串,必须加引号。字符串值必须始终用引号引起来。布尔值必须是truefalse(小写)。检查http://json.org/http://www.ietf.org/rfc/rfc4627.txt?number=4627http://jsonlint.com

这里是你的数据的结构:

  1. 顶层值是一个对象(字典)
  2. 这个对象有一个名称(键)称为Sections,其价值本身另一个对象(字典)
  3. Sections有一个称为Section它的值是数组
  4. Section ARRA每个元素名称(键) y是一个对象(字典)
  5. Section数组中的每个元素有一个称为名称(键)Article它的值是数组,以及其他名称(键):IDtitletotalNews
  6. 中的每个元素该Article数组是一个对象

如果你的JSON数据是有效的,可以按如下方式解析它们:

// 1. 
NSDictionary *results = [jsonString JSONValue]; 
// 2. 
NSDictionary *sections = [results objectForKey:@"Sections"]; 
// 3. 
NSArray *sectionsArray = [sections objectForKey:@"Section"]; 
// 4. 
for (NSDictionary *section in sectionsArray) { 
    // 5. 
    NSLog(@"Section ID = %@", [section objectForKey:@"ID"]; 
    NSLog(@"Section Title = %@", [section objectForKey:@"Title"]; 
    NSArray *articles = [section objectForKey:@"Article"]; 
    // 6. 
    for (NSDictionary *article in articles) { 
     NSLog(@"Article ID = %@", [article objectForKey:@"ID"]; 
     NSLog(@"Article Title = %@", [article objectForKey:@"Title"]; 
     // … 
    } 
} 
+0

感谢您的答案!我使用了在线查看工具,并设法注意到数据确实很奇怪。不幸的是,我无法控制它,我只是写了几行来处理最终的id,姓名和全部新闻。再次感谢你 ! – Pepe 2011-02-09 01:15:34

0

你的JSON框架大概分析出一个你期待NSArray的NSDictionary。它会让你将一个NSDictionary分配给一个NSArray,但是当你尝试调用你的“数组”时,你会得到一个运行时异常。通过你发布的JSON判断(这是不正确的JSON),这就是我的解析代码的样子。 NSDictionaries和NSArrays的名称是根据它们所代表的JSON属性命名的。

NSDictionary* results = [jsonString JSONValue]; 
NSDictionary* sections = [results valueForKey:@"Sections"]; 
NSArray* section = [sections valueForKey:@"Section"]; 
NSArray article = [[section objectAtIndex:0] valueForKey:@"Article"]; 

for (NSDictionary* anArticle in article) { 
    NSLog(@"%@", [anArticle valueForKey:@"Title"]); 
}