无法使用Obj-C读取JSON对象

时间:2011-02-09 00:50:28

标签: iphone objective-c json

我正在尝试使用json-framework和obj-C

来阅读以下json对象
{
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;
        }
    );
};
}

我的目的是要有一个文章列表(词典列表),以便我以后可以轻松访问它们。我已经停留了一段时间,我的代码给了我一个关于为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);
}

谢谢!

2 个答案:

答案 0 :(得分:1)

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

以下是您的数据结构:

  1. 顶级值是对象(字典)
  2. 此对象有一个名为Sections的名称(键),其值本身就是另一个对象(字典)
  3. Sections有一个名为Section的名称(密钥),其值为数组
  4. Section数组中的每个元素都是一个对象(字典)
  5. Section数组中的每个元素都有一个名为Article的名称(键),其值为数组,以及其他名称(键):ID,{{1} },title
  6. totalNews数组中的每个元素都是一个对象
  7. 如果您的JSON数据有效,您可以按如下方式解析它们:

    Article

答案 1 :(得分: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"]);
}
相关问题