рд╕реБрдкрд░ рд╕рд░рд▓ iOS JSON рдореИрдкрд░

рд╣рд░ рдХреЛрдИ рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрддрд╛ рд╣реИ, рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдореИрдкрд┐рдВрдЧ рдЬреЛрдВрд╕ / рдПрдХреНрд╕рдПрдордПрд▓ / рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрднреА-рдХрднреА рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдЖрдк рд╕рд┐рд░реНрдл рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд░реЗрд╕реНрдЯрдХрд┐рдЯ рдЬреИрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрдпреЛрдЬрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреВрд╕рд░реА рдмрд╛рдЗрдХ рдХреНрдпреЛрдВ рд▓рд┐рдЦреЗрдВ?

рдЗрд╕рдХреЗ рдХрдИ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдорд┐рдиреА-рдореИрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ:



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЧрд┐рдЯрд╣рдм рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ , рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИ рдФрд░ рдореИрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред

рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдХреБрдЫ рдФрд░, рдореИрдВ рд╡рд┐рдкрдХреНрд╖ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛:


рдкреНрд▓рд╕рд╕ рдореЗрдВ рд╕реЗ - рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди, рдЖрдХрд╛рд░ рдореЗрдВ рдЫреЛрдЯрд╛ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдордЭрдирд╛ рд╣реИ, рд╡рд╣ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЙрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ? рдореИрдкрд░ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рд╣реЛрддрд╛ рд╣реИ - рдЯрд╛рдЗрдиреАрдореИрдкрд┐рдВрдЧрдореЙрдбрд▓, рдпрд╣ рдореЙрдбрд▓ рдХреЗ рд╕рднреА рдмрд╛рдж рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ json рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдПрдХ TinyMappingModel рд╡рдВрд╢рдЬ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдг рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЖрджрд░реНрд╢ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ рдЬреЛрди рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдлрд┐рд░ рдореИрдкрд┐рдВрдЧ рд╕реНрд╡рдпрдВ рд╕реЗ рд╣реЛрдЧреА, рдЬреИрд╕реЗ рдХрд┐ рдЬрд╛рджреВ (рдХреЗрд╡реАрд╕реА) рджреНрд╡рд╛рд░рд╛, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрдм рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдо im, рдирд╛рдо, рдЖрдИрдбреА, 1 рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реАрд▓реНрдб) ), рдореИрдВ рдиреАрдЪреЗ рд▓рд┐рдЦреВрдВрдЧрд╛ред

TinyMappingModel рдореЗрдВ 4 рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

//public + (instancetype)mapObjectFromDictionary:(NSDictionary *)data; + (NSArray *)mapArrayOfObjects:(NSArray *)data; //protected methods - (NSDictionary *)keyToClassMappingRules; - (NSDictionary *)keyToPropertyNameReplacementRules; 

рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╡рд╛рд░рд┐рд╕ рдЕрдВрддрд┐рдо рджреЛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

- (NS рд╕рд╣рд╛рд░реЗ *) keyToClassMappingRules; - рдпрджрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдХрд╕реНрдЯрдо рд╡рд░реНрдЧ (TinyMappingModel рд╡рдВрд╢рдЬ) рдпрд╛ рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП jSON рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╡рд┐рдзрд┐ рдХреЛ рдХреБрдВрдЬреА-рдлрд╝реАрд▓реНрдб рдирд╛рдо рдЬреЛрдбрд╝реА рдХреЗ рд╕рд╛рде рд╢рдмреНрджрдХреЛрд╖ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдорд╛рди рд╡рд╣ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдореИрдк рдХрд░реЗрдЧрд╛, рдпрд╛, рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХрд┐рди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 - (NSDictionary *)keyToClassMappingRules { return @{@"im:name":[TitleModel class], @"im:image":[ImageModel class]}; } 

- (NS рд╕рд╣рд╛рд░реЗ *) keyToPropertyNameReplacementRules; - рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдирд╛рдо рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ json рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Json рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдХреБрдВрдЬреА рд╣реИ, рдореВрд▓реНрдп рд╡рд░реНрдЧ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 - (NSDictionary *)keyToPropertyNameReplacementRules { return @{@"im:name":@"name",@"im:image":@"images"}; } 

рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рджреЛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ (рдЬреИрд╕реЗ EntryModel) рд╣реЛрдЧрд╛:

 @class TitleModel; @interface EntryModel : TinyMappingModel @property (nonatomic, strong) TitleModel *name; @property (nonatomic, strong) NSArray *images; @end 

рдирд╛рдо рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, ImageModel рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЪрд┐рддреНрд░ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрдХреНрд╖рд╛рдПрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ ImageModel рдФрд░ TitleModel), рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ NSClassFromString, рд▓реЗрдХрд┐рди рдирд╣реАрдВред ред

рдЕрдЧрд▓рд╛, рдЖрдк рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ? рдЬрдм рд╣рдордиреЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ json рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдХреНрд╕рд░ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ AFNetworking рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ), рддреЛ рдпрд╣ рд╣реИ:

 //data - NSDictionary c json EntryModel *model= [EntryModel mapObjectFromDictionary:data]; // data - NSArray EntryModel *modelArray= [EntryModel mapArrayOfObjects:data]; 

рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдВ рд╕рдВрднрд╡ рд╣реИрдВред рдореБрдЦреНрдп рдмрд╛рдд рд╕рд╣реА рд╡рд╕реНрддреБ рдХреЛ рд╕рд╣реА рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рдЗрд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдореИрдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдзрд┐ + (рдЗрдВрд╕реНрдЯреЗрдВрдЯрд╛рдЗрдк) mapObjectFromDictionary: (NS рд╕рд╣рдХрд░реНрдореА *) рдбреЗрдЯрд╛, рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдореЙрдбрд▓ рдмрдирд╛рддрд╛ рд╣реИ, json рдХреБрдВрдЬрд┐рдпреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдореИрдк рдХрд░реЗрдВрдЧреЗ (рд╡рд░реНрдЧ) - рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ keyToClassMappingRules рдореЗрдВ рд╣реИред рдФрд░ рдХрд┐рд╕ рдирд╛рдо рдХреА рд╕рдВрдкрддреНрддрд┐ рд╣реИ - рдпрд╣ KeyToPropertyNameReplacementRules рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдореИрдк рдХрд░реЗрдВрдЧреЗ, рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рддреАрди рддрд░реАрдХреЗ рд╣реИрдВ:


рд╡рд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди "рдЗрдХрд╛рдЗрдпрд╛рдБ" рд╣реИрдВ - рдХреНрдпрд╛ рдирдХреНрд╢рд╛ рдХрд░рдирд╛ рд╣реИ, рдХрд┐рд╕ рд╡рд░реНрдЧ рдХреЛ рдирдХреНрд╢рд╛ рдХрд░рдирд╛ рд╣реИ рдпрд╛ "рдЖрджрд┐рдо", рдХреМрди рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдореИрдк рдХрд░рдирд╛ рд╣реИ (рдпрд╛ рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ json рдХреБрдВрдЬреА рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП), рдФрд░ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реИ рдХреЛрдИ рдорд╛рди рдЬреЛ рдореИрдк рдпрд╛ рдирд╣реАрдВ рдХрд╣рд▓рд╛рддрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ mapObjectFromDictionary рдпрд╛ mapArrayOfObjects рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред mapArrayOfObjects рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдПрд░реЗ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ [self mapArrayOfObjects: value] рдпрд╛ [mappedArray addObject: [self mapObjectFr рдврд╛рдБрдЪрд╛: value] рдХреЛ рдбрд╛рд▓рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рд╡реИрд▓реНрдпреВ рд╡рд╣ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдПрд░реЗ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣ рд╕рдм рд╣реИред

рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдкреНрд░рдпреЛрдЬреНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рд░рд╛рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдФрд░ рдЕрдЧрд░ рдЖрдкрдиреЗ рд╕реНрд░реЛрдд рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рддреЛ рдореИрдкрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

Source: https://habr.com/ru/post/In181740/


All Articles