iPhone NSArray de dicionário de valores Dicionário
-
20-08-2019 - |
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.
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