Pergunta

Eu tenho um dicionário de dicionários que está sendo devolvido para mim em formato JSON

{
    "neverstart": {
        "color": 0, 
        "count": 0, 
        "uid": 32387, 
        "id": 73129, 
        "name": "neverstart"
    }, 
    "dev": {
        "color": 0, 
        "count": 1, 
        "uid": 32387, 
        "id": 72778, 
        "name": "dev"
    }, 
    "iphone": {
        "color": 0, 
        "count": 1, 
        "uid": 32387, 
        "id": 72777, 
        "name": "iphone"
    }
}

Eu também tenho um NSArray contendo o ID é necessário para um item. por exemplo. [72777, 73129]

O que eu preciso ser capaz de fazer é obter um dicionário de id => nome para os itens na matriz. Eu sei que isto é possível através da iteração através da matriz, e em seguida, loop através de todos os valores no dicionário e verificar valores, mas parece que deve haver um método menos cansativo de fazer isso.

Desculpem a minha ignorância como eu estou apenas tentando encontrar meu caminho em torno do iPhone SDK e aprender Objective C e Cocoa.

Foi útil?

Solução

Em primeiro lugar, desde que você está usando JSON, eu estou esperando que você já encontrou BSJSONAdditions e / ou json-quadro, os dois projetos open-source para analisar JSON em estruturas de cacau nativo para você. Este post dá uma idéia de como usar o último para obter um NSDictionary de uma string JSON.

O problema torna-se então um de encontrar os valores correspondentes no dicionário. Eu não estou ciente de um único método que faz o que você está procurando - os quadros de cacau são muito poderosos, mas são projetados para ser muito genérico e flexível. No entanto, ele não deve ser muito difícil colocar juntos em não muitas linhas ... (Já que você está programando no iPhone, eu vou usar a enumeração rápida para tornar o código mais limpo.)

NSDictionary* jsonDictionary = ...
NSDictionary* innerDictionary;
NSArray* requiredIDs = ...
NSMutableDictionary* matches = [NSMutableDictionary dictionary];
for (id key in jsonDictionary) {
    innerDictionary = [jsonDictionary objectForKey:key];
    if ([requiredIDs containsObject:[innerDictionary objectForKey:@"id"]])
        [matches setObject:[innerDictionary objectForKey:@"name"]
                    forKey:[innerDictionary objectForKey:@"id"]];
}

Este código pode ter erros, mas os conceitos deve ser sólida. Observe também que a chamada para [NSMutableDictionary dictionary] irá retornar um objeto autoreleased.

Outras dicas

Você já tentou este método NSDictionary:

+ (id)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys

Drew tem a resposta ... Eu achei que o manual do GCC para o NSDictionary foi útil em um bare-ossos maneira no outro dia quando eu tinha uma pergunta semelhante.

http://www.gnustep.org/resources /documentation/Developer/Base/Reference/NSDictionary.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top