MJExtension (conversão automática de JSON para modelo de dados)
Organizado em: http://www.jianshu.com/p/93c242452b9b.
Reimpresso de https://www.cnblogs.com/huoran1120/p/5470480.html
1. Função de MJExtension
Dicionário -> Modelo
Modelo -> Dicionário
Matriz de dicionário -> Matriz de modelo
Matriz de modelo -> Matriz de dicionário
2.pod import statement pod'MJExtension '
3. Conversão simples do modelo de dados
Aluno * stu = [Aluno mj_objectWithKeyValues: dict];
O nome do atributo do objeto deve ser consistente com os dados em json
Se houver um modelo aninhado no modelo, use esta frase diretamente e use. Para acessar
por exemplo: status.retweetedStatus.user.name
4. Existem atributos de matriz no modelo, e a matriz contém outros modelos
Implementado dentro do modelo StatusResult
+ (NSDictionary *) objectClassInArray {
Retorna @{
@ "status": @ "Status",
@ "anúncios": @ "Anúncio"
}
}
StatusResult * result = [StatusResult mj_objectWithKeyValues: dict];
Esta forma de escrita não precisa importar arquivos de status e de cabeçalho de anúncio, o nome da classe é escrito após os dois pontos
para (status * status em result.statuses) acesso transversal
5. Se o nome do atributo no modelo for diferente da chave do dicionário (e mapeamento multinível)
@interface Aluno: NSObject
@property (copy, nonatomic) NSString * ID;
@property (copy, nonatomic) NSString * desc;
@property (copiar, não atômico) NSString * nowName;
@property (copy, nonatomic) NSString * oldName;
@property (copiar, não atômico) NSString * nameChangedTime;
@property (strong, nonatomic) Bag * bag;
@fim
@interface Bag: NSObject
@property (copiar, não atômico) NSString * nome;
@property (atribuir, não atômico) preço duplo;
@fim
NSDictionary * dict = @ {
@ "id": @ "20",
@ "descrição": @ "孩子",
@ "name": @ {
@ "newName": @ "lufy",
@ "oldName": @ "kitty",
@ "info": @ {
@ "nameChangedTime": @ "2013-08"
}
},
@"de outros" : @{
@"saco" : @{
@ "nome": @ "小 书包",
@ "preço": @ 100,7
}
}
};
Implemente o seguinte método no aluno
+ (NSDictionary *) mj_replacedKeyFromPropertyName {
Retorna @{
@"Eu fiz",
@ "desc": @ "desciption",
@ "oldName": @ "name.oldName",
@ "nowName": @ "name.newName",
@ "nameChangedTime": @ "name.info.nameChangedTime",
@ "bag": @ "other.bag"
};
}
Mapeamento multinível, a frente é o nome personalizado e a parte traseira é a relação de mapeamento no dicionário
6. Converta uma matriz de dicionário em uma matriz de modelo
NSArray * dictArray = @ [
@ {
@ "name": @ "Jack",
@ "icon": @ "lufy.png",
},
@ {
@ "name": @ "Rose",
@ "icon": @ "nami.png",
}
];
NSArray * userArray = [Usuário mj_objectArrayWithKeyValuesArray: dictArray];
for (User * user in userArray) {
NSLog (@ "nome =% @, ícone =% @", usuário.nome, usuário.icon);
}
7. Transforme um modelo em um dicionário
NSDictionary * statusDict = status.keyValues;
8. Converta uma matriz de modelo em uma matriz de dicionário
NSArray * userArray = @ [user1, user2];
NSArray * dictArray = [User keyValuesArrayWithObjectArray: userArray];
NSLog (@ "% @", dictArray);