Доступ к значениям неизвестных словарных ключей - PullRequest
0 голосов
/ 27 января 2012

Мой JSON-ответ выглядит следующим образом:

    {
    "themes": [
        [
            "Direction des Routes Secteur de Pithiviers ",
            "mairies",
            "Morailles 45300 PITHIVIERS LE VIEIL ",
            "0238345744",
            "48.823042",
            "2.365907"
        ],
        [
            "Crédit Mutuel Du Centre ",
            "banques",
            "agence de Pithiviers  33 r Am Gourdon 45300 PITHIVIERS",
            "0820834080",
            "48.703042",
            "2.145907"
        ]
    ]
}

Как видите, все ключи неизвестны, у меня нет Key:value, так как я могу ссылаться на каждое значение.

NSDictionary *allThemesDict=[[request responseString]JSONValue];
 NSArray *allThemesValues=[allThemesDict objectForKey:@"themes"];
    for (int i=0; i<[allThemesValues count]; i++) {
        NSDictionary *currentTheme=[allThemesValues objectAtIndex:i];//here i get the first 6 values, how can i display it?
        }

Ответы [ 3 ]

2 голосов
/ 27 января 2012

Это массивы, а не словари. Таким образом, вы можете просто получить массив следующим образом:

NSDictionary *allThemesDict = [[request responseString] JSONValue];
NSArray *allThemesValues = [allThemesDict objectForKey:@"themes"];
for (int i=0; i<[allThemesValues count]; i++) {
    NSArray *currentTheme = [allThemesValues objectAtIndex:i];
    NSLog(@"currentTheme = %@", currentTheme);

    // Then access [currentTheme objectAtIndex:1] for example to get "mairies" in the first case.
}
1 голос
/ 27 января 2012

В вашем примере есть только один ключ: в словаре верхнего уровня есть ключ, который называется "themes". Все остальное - массив или примитив.

Предполагая, что вы заранее не знаете, ключ "themes" будет называться "themes", вы можете обнаружить его, выполнив итерацию по словарю. Вы можете столкнуться с проблемой в том, что если вы не знаете, что это за ключи, вы можете не знать достаточно о данных, чтобы предсказать тип и содержание значения. Решение здесь заключается в том, чтобы согласовать с разработчиками сервера спецификацию формата данных. Для справки, вы перебираете словарь следующим образом (есть несколько способов):

for (id key in myDictionary) {
    //...
}
0 голосов
/ 27 января 2012

Вы просто хотите перебрать массив? В этом случае что-то вроде этого может работать:

    NSDictionary *currentTheme=[allThemesValues objectAtIndex:i];
        for (id item in currentTheme) {
            NSLog(@"item: %@", item);
        }
    }
...