繁体   English   中英

使用Obj-C读取JSON对象时出现问题

[英]Trouble reading JSON object using Obj-C

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

谢谢 !

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

这是数据的结构:

  1. 顶级值是一个对象(字典)
  2. 该对象具有一个名为Sections的名称(键),其值本身就是另一个对象(字典)
  3. Sections有一个名为Section的名称(键),其值是一个数组
  4. Section数组中的每个元素都是一个对象(字典)
  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"];
       // …
    }
}

您的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"]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM