将JSON响应保存到NSDictionary

时间:2012-01-24 16:05:07

标签: iphone objective-c asihttprequest

这是我JSON返回的内容;

{
    "1": {
        "name": "Sharon",
        "telephone": "48-9929329483"

    },
    "2": {
        "name": "Sage",
        "telephone": "48-9560333267"
    },
    "3": {
        "name": "Alex",
        "telephone": "48-8467982378"
    }
}

我需要将它保存在NSDictionary中。我的工作如下;

 NSDictionary *contentOfDictionary = [responseString JSONValue];

NSDictionary* studentDictionary = [contentDictionary objectForKey:@"1"];
NSString *nameOfStudent = [studentDictionary objectForKey:@"name"];
NSString *nameOfStudent = [studentDictionary objectForKey:@"telephone"];

NSDictionary* studentDictionary1 = [contentDictionary objectForKey:@"2"];
NSString *nameOfStudent1 = [studentDictionary objectForKey:@"name"];
NSString *nameOfStudent1 = [studentDictionary objectForKey:@"telephone"];

..... etc

所以我这样做是为了将属性保存到dictionariesstrings。但问题是我正在对关键值进行硬编码1,2,3 etc ..(例如:[contentDictionary objectForKey:@"2"];

实际上我不知道JSON文件会有多少学生。可能有100甚至更多。那么我怎样才能以代码自动的方式编写它,读取JSON响应(全部100条记录)并将其保存到NSDictionary,反之亦然?

注意:我想我必须使用for循环或其他东西。

4 个答案:

答案 0 :(得分:4)

看起来你在'contentsOfDictionary'中有一个字典,其中的键是“1”,“2”,......而且值是包含姓名/电话号码的字典。所以你只需要遍历所有的值:

NSMutableArray *studentDictionaries = [[NSMutableArray alloc] init];
for (NSDictionary *studentDictionary in contentOfDictionary.allValues)
{
    [studentDictionaries addObject:studentDictionary];
}

答案 1 :(得分:1)

如果您的JSON响应中的每个字典条目都是唯一编号并且没有间隙地增加,那么您可以执行以下操作:

NSMutableArray *studentDictionaries = [[NSMutableArray alloc] init];
NSUInteger index = 1;
NSDictionary *studentDictionary;
while (studentDictionary = [contentDictionary objectForKey:[NSString stringWithFormat:@"%d", index++]]) {
    [studentDictionaries addObject:studentDictionary];
}

答案 2 :(得分:0)

查看自iOS5(或SBJSON框架)以来可用的NSJSONSerialization。您将解析您的JSON并嵌入到obj-c对象中。

答案 3 :(得分:0)

而不是使用NSDictionary来存储responsestring JSONValue

 NSDictionary *contentOfDictionary = [responseString JSONValue];

使用NSArray存储responsestring JSONValue

  NSArray *arr= [responseString JSONValue];

通过这种方式,您将获得总计数,数组中的每个对象都是一个可以轻松访问的字典。