EasyMapping, рдпрд╛ JSON рдпрд╛рддреНрд░рд╛

рдХрдВрдкреНрдпреВрдЯрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдордиреБрд╖реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджрдХ рдЬреАрд╡рди рдкрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рднреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреА рдкреНрд░рдХреГрддрд┐ рд╣реИред рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдкрдврд╝ рдФрд░ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдФрд░ рд╕реБрдзрд╛рд░рдиреЗ рдХреА рдЖрд╢рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдбрдЧрд▓рд╕ рдХреНрд░реЙрдХрдлреЛрд░реНрдб, рдЬреЗрдиреНрд╕рди рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓реЗрдЦрдХ


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

JSON рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдореЗрдВ рдЙрдирдХреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддреА рд╣реИрдВред рдХрдИ RestKit рджреНрд╡рд╛рд░рд╛ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдФрд░ рдкреНрд░рд┐рдп рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЖрджрд░реНрд╢ REST API рд╣реЛред рдкрдХреНрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрджрдо - рдФрд░ рдЖрдк рд╕реВрдХреНрд╖реНрдорджрд░реНрд╢реА рдХреЗ рд╕рд╛рде рдирд╛рдЦреВрдиреЛрдВ рдореЗрдВ рд╣рдереМрдбрд╝рд╛ рд▓реЗрдВрдЧреЗ, рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдХрд╛рдлреА рд╕рд░рд▓ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред GitHub рдбреЗрд╡рд▓рдкрд░реНрд╕ - рдореЗрдВрдЯрд▓ рд╕реЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдореЗрдВрдЯрд▓ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ NSValueTransformer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рдЖрдИрдУрдПрд╕ / рдореИрдХ рдУрдПрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рддрдХрдиреАрдХ рдирд╣реАрдВред

рдореИрдВ рдЙрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЧреАрдерд╣рдм рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЬреЛ рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ JSON рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ - рдИрдЬреАрдПрдордкрд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдХрд╛рд░реНрдп


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд JSON рд▓реЗрдВ:

{ "name": "Lucas", "email": "notexisting@gmail.com", "gender" : "male", "car": { "model": "i30", "year": "2013" }, "phones": [ { "ddi": "55", "ddd": "85", "number": "1111-1111" }, { "ddi": "55", "ddd": "11", "number": "2222-222" } ] } 


рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

 typedef enum { GenderMale, GenderFemale } Gender; @interface Person : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *email; @property (nonatomic, assign) Gender gender; @property (nonatomic, strong) Car *car; @property (nonatomic, strong) NSArray *phones; @end @interface Car : NSObject @property (nonatomic, copy) NSString *model; @property (nonatomic, copy) NSString *year; @end @interface Phone : NSObject @property (nonatomic, copy) NSString *DDI; @property (nonatomic, copy) NSString *DDD; @property (nonatomic, copy) NSString *number; @end 


рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдореИрдкрд┐рдВрдЧ (EKObjectMapping) рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 EKObjectMapping * mapping = [[EKObjectMapping alloc] initWithObjectClass:[Person class]]; 


рдлрд┐рд░ рдЖрдкрдХреЛ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╕рдВрдмрдВрдз рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ <JSON рдореЗрдВ рдХреБрдВрдЬреА> -> <рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдирд╛рдо>ред рдореИрдкрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЗрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдИрдЬреАрдПрдордкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЗрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВред

1. JSON рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЧреБрдг рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ

рдЙрджрд╛рд╣рд░рдг, рд╡рд░реНрдЧ рд╡реНрдпрдХреНрддрд┐:

 [mapping mapFieldsFromArray:@[@"name",@"email"]]; 


2. JSON рдореЗрдВ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдирд╛рдореЛрдВ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВ

рдЙрджрд╛рд╣рд░рдг, рдлрд╝реЛрди рд╡рд░реНрдЧ:

 [mapping mapFieldsFromDictionary:@{@"ddi":@"DDI", @"ddd":@"DDD"}]; 


3. рдорд╛рди рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ

рдЙрджрд╛рд╣рд░рдг, рд╡рд░реНрдЧ рд╡реНрдпрдХреНрддрд┐

 NSDictionary *genders = @{ @"male": @(GenderMale), @"female": @(GenderFemale) }; [mapping mapKey:@"gender" toField:@"gender" withValueBlock:^(NSString *key, id value) { return genders[value]; }]; 


4. рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рджреВрд╕рд░реЗ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБ рд╣реЛрддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг, рд╡рд░реНрдЧ рд╡реНрдпрдХреНрддрд┐

 [mapping hasOneMapping:[Car objectMapping] forKey:@"car"]; 


5. рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрддреА рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ

 [mapping hasManyMapping:[Phone objectMapping] forKey:@"phones"]; 


рдкрд░рд┐рдгрд╛рдо


рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореИрдкрд┐рдВрдЧ:

 // Car mapping + (EKObjectMapping *)objectMapping { EKObjectMapping * mapping = [[EKObjectMapping alloc] initWithObjectClass:[Car class]]; [mapping mapFieldsFromArray:@[@"model", @"year"]]; return mapping; } // Phone mapping + (EKObjectMapping *)objectMapping { EKObjectMapping * mapping = [[EKObjectMapping alloc] initWithObjectClass:[Phone class]]; [mapping mapFieldsFromArray:@[@"number"]]; [mapping mapFieldsFromDictionary:@{ @"ddi" : @"DDI", @"ddd" : @"DDD" }]; return mapping; } // Person mapping + (EKObjectMapping *)objectMapping { EKObjectMapping * mapping = [[EKObjectMapping alloc] initWithObjectClass:[Person class]]; NSDictionary *genders = @{ @"male": @(GenderMale), @"female": @(GenderFemale) }; [mapping mapFieldsFromArray:@[@"name", @"email"]]; [mapping mapKey:@"gender" toField:@"gender" withValueBlock:^(NSString *key, id value) { return genders[value]; }]; [mapping hasOneMapping:[Car objectMapping] forKey:@"car"]; [mapping hasManyMapping:[Phone objectMapping] forKey:@"phones"]; return mapping; } 


рдЕрдм рдореИрдкрд┐рдВрдЧ рддреИрдпрд╛рд░ рд╣реИ, рд╡реНрдпрдХреНрддрд┐ рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

 NSDictionary * personProperties = ...; // JSON  Person,  ,   . Person * person = [[Person alloc] init]; [EKMapper fillObject:person fromExternalRepresentation:personProperties withMapping:mapping]; 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ if-else рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; NSNull рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЪреЗрдХ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореМрдЬреВрджрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╕рд╛рди рдорд╛рдирдЪрд┐рддреНрд░рдг рдмрдиреНрд╕

1. рдХреЛрд░рдбрд╛рдЯрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
2. NSNull рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЪреЗрдХ - NSNull рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ nil рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
3. NS рд╕рд╣рд╛рд░ / NSArray рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
4. CocoaPods рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рд╕рдорд░реНрдерди
5. рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрд╡рд╣рд╛рд░

EKMapper рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рднрд░рдирд╛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмреЗрд╕рдореЙрдбрд▓ рдХрд╣рддреЗ рд╣реИрдВ, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

 - (id)initWithProperties:(NSDictionary *)properties { if (self = [super init]) { [EKMapper fillObject:self fromExternalRepresentation:properties withMapping:[[self class] objectMapping]; } return self; } + (EKObjectMapping *)objectMapping { //Do nothing. Implement in subclass if you want to initialize object //via object mapping return nil; } 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд╕реНрддреБ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 Person * person = [[Person alloc] initWithProperties:personProperties]; 


рдирд┐рд╖реНрдХрд░реНрд╖


рдкреНрд░рддреНрдпреЗрдХ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ рдУрдкрди-рд╕реЛрд░реНрд╕ рдЙрддреНрдкрд╛рдж рдПрдХ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреЛрд░реНрдб рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЪреНрдЪ рдФрд░ рдЙрдЪреНрдЪрддрд░ рдХреВрджрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдИрдЬрд╝реАрдореИрдкрд┐рдВрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдорд╣реАрдиреЗ рдкреБрд░рд╛рдиреА рд╣реИ, рдкрд╣рд▓реА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдкреБрд░рд╛рдиреЗ рдФрд░ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЗрд╕рдХреА рд╕рд╛рджрдЧреА рдореЗрдВред рдореИрдВ рдЗрд╕ рджрд┐рд▓рдЪрд╕реНрдк рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ - JSON рдХреЗ рдЖрд╕рдкрд╛рд╕ рдпрд╛рддреНрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рдордп рдФрд░ рд╢реБрднрдХрд╛рдордирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдВрджрд░реНрдн


1. рдЧрд┐рддреВрдм рдкрд░ рдИрдЬреАрдПрдордкрд┐рдВрдЧ
2. рдХреЛрдХреЛрдкреЛрдбреНрд╕

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди

1. рд░реЗрд╕реНрдЯрдХрдЯ
2. рдореЗрдВрдЯрд▓

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


All Articles