Ios 从Json对象对象C获取值

Ios 从Json对象对象C获取值,ios,objective-c,json,nsdictionary,Ios,Objective C,Json,Nsdictionary,我使用的是目标c,这是我的问题 ( { error = 0; newsletter = ( { date = "2015-11-23"; description = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lo

我使用的是目标c,这是我的问题

(
        {
        error = 0;
        newsletter = (
                     {
                      date = "2015-11-23";
                      description = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop p";
                      id = 42;
                      image = "mylink/uploads/14482883361619729430.png";
                      "post_count" = 2;
                      "posted_by" = admin;
                      title = Testing;
                    },
                    {
                     date = "2015-11-28";
                     description = "I am testing";
                     id = 48;
                     image = "mylink/ips/uploads/14486977841870344075.jpg";
                     "post_count" = 1;
                     "posted_by" = admin;
                     title = "Ips Informa";
                    }
                    );
       }
)
上面是我从asihttpRequest检索的json字符串

现在我想在表视图中显示时事通讯,例如日期、标题、说明

我刚刚获得了具有以下内容的阵列:

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData //1
                                                                   options:NSJSONReadingMutableContainers
                                                                     error:&err];
我使用以下代码获得输出:

NSLog(@"NewLetter Title: %@", json);
下列情况下的计数:

NSLog(@"Count is - %lu",[json count]);
计数为-1


我不熟悉目标C,我试图解决,但没有找到获取时事通讯数据的方法?

json现在是一个
NSDictionary
,因此请使用常规访问器:

NSDictionary *firstObject = json[0];

NSDictionary *newsletter = firstObject[@"newsletter"];

NSString *firstDescription = newsletter[@"description"];

json
对象包含一个带有一个项的
NSArray
(用括号表示),这就是计数为1的原因

使用获取项目的内容

json[0]
这是一个
NSDictionary
(用大括号表示)

使用获取键
时事通讯的值

json[0][@"newsletter"]
该值也是一个
NSArray


继续按数字订阅检索数组项(如
[0]
)和按键订阅检索字典项(如
[@“date”]

如果您是Objective-C新手,则必须学习以下所有内容:

一个。NSArray和NSDictionary类

两个。这个方法是一个类,它告诉你一个对象是什么

三个。遍历数组,最好使用快速枚举

四个。使用objectForKey或最好是索引表示法访问字典的键

当您了解了这四个方面之后,您就可以开始研究解析JSON了


顺便说一句,你不可能得到“时事通讯的日期”,因为可能有任何数量的时事通讯,而你拥有的那个有两个日期。你真的需要考虑你正在接收什么样的数据以及你想用它们做什么

每个JSON消息都有一个顶级对象。如果您查看JSON:

(
    {
你可以看到你有一个顶级的
数组
{
字典
}
。有关详细信息,请参阅

因此,您的代码已经走上了正确的轨道。您只需要访问数组中的每个字典,但是JSON实际上可以是任何东西,因此您需要进行防御性编码,并在访问它之前检查它是否是
NSArray

NSArray* json = [NSJSONSerialization JSONObjectWithData:responseData
                                                options:0
                                                  error:&err];
if ([json isKindOfClass:[NSArray class]]) {
    for (NSDictionary *dict in json) {
        NSNumber *error = dict[@"error"];
        NSArray *newsletter = dict[@"newsletter"];
        for (NSDictionary *entry in newsletter) {
            NSNumber *identity = entry[@"id"];
            NSString *description = entry[@"description"];
            // etc.
        }
    }
} else if (err) {
    NSLog(@"Error in JSON: %@", [err localizedDescription]);
} else {
    NSLog(@"Unsupported JSON received");
}
我不知道你为什么会得到count=1,因为它与你发布的JSON不匹配;您应该记录实际的JSON以进行调试:

NSLog(@"Received JSON: %@", [NSString stringWithUTF8String:[responseData bytes]]);

你删除的第一行代码毫无意义。你应该修正它,而不是删除它。不,你应该表现得成熟一点,对它提出质疑,而不是在我发布后两分钟内把它贴上“胡说八道”的标签。我检查了我发布的代码并更正了它。请把你的粗鲁留在家里@gnasher729:这不是我发表评论的地方,那是胡说八道。你从来没有修正过这些胡说八道,你删除了它,当它很容易修正的时候。似乎有人不喜欢你的答案。我看不出有什么问题。事实上,它没有什么问题。事实上,你回到了零:-)这根本不能回答这个问题-太模糊了。你也可以告诉询问者“学习objective-c”,这绝对是他应该做的。如果人们想编写Objective-C代码,告诉他们学习Objective-C有什么不对吗?叹气是的,否则,这对任何objective-c标记都是一个答案…@trojanfoe:计数是一,因为根数组包含一个项,并且没有崩溃,因为
NSArray
NSDictionary
确实响应
count
@vadian;我的代码不正确;字典中有一个时事通讯数组。我会更正它。@user3015451我原始答案中的代码不应该起作用!不过现在应该可以了,不要再发问了。