【问题标题】:How to parse Dictionary with keys that have array of dictionaries如何使用具有字典数组的键解析字典
【发布时间】:2012-08-30 19:23:09
【问题描述】:

UPDATE-8/31/12-所以现在我需要通过基于“isReservable”= 1 的字典数组,然后显示“开始”。我只是想获取每个字典数组的内容,我可以从那里开始(现在)。以下是我尝试过的。感谢大家的帮助,我每天都在学习更多知识。

来自php页面的json

{
"slots": {
    "2012-08-31 00:00:00 America/Los_Angeles": [
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-30 17:00:00 America/Los_Angeles",
            "end": "2012-08-30 17:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-30 17:30:00 America/Los_Angeles",
            "end": "2012-08-30 18:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": false,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-30 18:00:00 America/Los_Angeles",
            "end": "2012-08-31 00:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": false,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 00:00:00 America/Los_Angeles",
            "end": "2012-08-31 08:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 08:00:00 America/Los_Angeles",
            "end": "2012-08-31 08:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 08:30:00 America/Los_Angeles",
            "end": "2012-08-31 09:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 09:00:00 America/Los_Angeles",
            "end": "2012-08-31 09:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 09:30:00 America/Los_Angeles",
            "end": "2012-08-31 10:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": false,
            "isReserved": true,
            "label": "Thomas Kroom",
            "begin": "2012-08-31 10:00:00 America/Los_Angeles",
            "end": "2012-08-31 12:30:00 America/Los_Angeles",
            "span": 5
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 12:30:00 America/Los_Angeles",
            "end": "2012-08-31 13:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 13:00:00 America/Los_Angeles",
            "end": "2012-08-31 13:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 13:30:00 America/Los_Angeles",
            "end": "2012-08-31 14:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 14:00:00 America/Los_Angeles",
            "end": "2012-08-31 14:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 14:30:00 America/Los_Angeles",
            "end": "2012-08-31 15:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 15:00:00 America/Los_Angeles",
            "end": "2012-08-31 15:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 15:30:00 America/Los_Angeles",
            "end": "2012-08-31 16:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 16:00:00 America/Los_Angeles",
            "end": "2012-08-31 16:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 16:30:00 America/Los_Angeles",
            "end": "2012-08-31 17:00:00 America/Los_Angeles",
            "span": 1
        }
    ],
    "2012-09-01 00:00:00 America/Los_Angeles": [
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 17:00:00 America/Los_Angeles",
            "end": "2012-08-31 17:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 17:30:00 America/Los_Angeles",
            "end": "2012-08-31 18:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": false,
            "isReserved": false,
            "label": " ",
            "begin": "2012-08-31 18:00:00 America/Los_Angeles",
            "end": "2012-09-01 00:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": false,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 00:00:00 America/Los_Angeles",
            "end": "2012-09-01 08:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 08:00:00 America/Los_Angeles",
            "end": "2012-09-01 08:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 08:30:00 America/Los_Angeles",
            "end": "2012-09-01 09:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 09:00:00 America/Los_Angeles",
            "end": "2012-09-01 09:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 09:30:00 America/Los_Angeles",
            "end": "2012-09-01 10:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 10:00:00 America/Los_Angeles",
            "end": "2012-09-01 10:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 10:30:00 America/Los_Angeles",
            "end": "2012-09-01 11:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 11:00:00 America/Los_Angeles",
            "end": "2012-09-01 11:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 11:30:00 America/Los_Angeles",
            "end": "2012-09-01 12:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 12:00:00 America/Los_Angeles",
            "end": "2012-09-01 12:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 12:30:00 America/Los_Angeles",
            "end": "2012-09-01 13:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 13:00:00 America/Los_Angeles",
            "end": "2012-09-01 13:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 13:30:00 America/Los_Angeles",
            "end": "2012-09-01 14:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 14:00:00 America/Los_Angeles",
            "end": "2012-09-01 14:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 14:30:00 America/Los_Angeles",
            "end": "2012-09-01 15:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 15:00:00 America/Los_Angeles",
            "end": "2012-09-01 15:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 15:30:00 America/Los_Angeles",
            "end": "2012-09-01 16:00:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 16:00:00 America/Los_Angeles",
            "end": "2012-09-01 16:30:00 America/Los_Angeles",
            "span": 1
        },
        {
            "isPending": false,
            "isReservable": true,
            "isReserved": false,
            "label": " ",
            "begin": "2012-09-01 16:30:00 America/Los_Angeles",
            "end": "2012-09-01 17:00:00 America/Los_Angeles",
            "span": 1
        }
    ]
}

这是我目前所拥有的

- (void)fetchedData:(NSData *)responseData {
    //parse out the json data

    NSError* error;
    //NSLog(@"string is %@", responseData);

    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error];

    NSDictionary* myslots =[json objectForKey:@"slots"];
NSLog(@"allslots: %@", myslots);
//for (NSString *slotKey in myslots.allKeys) {
    //NSDictionary *slot = [myslots valueForKey:slotKey];
    //NSLog(@"These are all the keys: %@", slotKey);
    NSArray *keys = [myslots allKeys];

更新-这就是我让它工作的方式:

for (NSString *slotKey in myslots.allKeys) {
    NSDictionary *slot = [myslots valueForKey:slotKey];
        NSArray *tests = [myslots objectForKey:slotKey];
    for (NSDictionary *myDict in tests){
        NSLog(@"%@", [myDict objectForKey:@"begin"]); 
    }
    }

现在我只需要把它改成 if "isReservable" = true then display "begin"

【问题讨论】:

  • 发布示例 JSON 响应可能会有所帮助,因为我无法理解您的 NSDictionary 的布局。

标签: ios xcode ios5 nsarray nsjsonserialization


【解决方案1】:

看起来 myslots 是一个 NSDictionary,而不是一个 NSArray ...要遍历它的所有键,更改

for (NSDictionary *slots in myslots) {
    // code
}

for (NSString *slotKey in myslots.allKeys) {
    NSDictionary *slot = [myslots valueForKey:slotKey];
    // code
}

【讨论】:

  • 我正在尝试提取“isReserevble=1”的记录,然后在表格视图单元格中显示“开始”的时间,这只是给了我“2012-08- 30 00:00:00 America/Los_Angeles”和“2012-08-31 00:00:00 America/Los_Angeles”
  • 我正在尝试获取其中的详细信息
【解决方案2】:

myslots 是一本字典。似乎第一个键“2012-08-30 00:00:00 America/Los_Angeles”是与您要查找的数组相关联的键。我建议重组您的数据,使其具有一个实际的静态键作为访问字典中值的键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多