рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ JSON рд╕реНрдХреАрдорд╛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛

рдпрд╛ JSON рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдПрдХ рдЕрдиреНрдп JSON рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓ рдЧрдпрд╛, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдХрд╣рд╛рдиреА


рдЬрдмрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╡рд▓рдкрд░ рдЖрд╡реЗрджрди рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдореИрдВ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред

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


рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ JSON рдпреЛрдЬрдирд╛ ( JSON рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдПрдХ рдЕрд╡рд▓реЛрдХрди рд▓реЗрдЦ ) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднреЗрдЬреЗ рдЧрдП JSON рдХрд╛ рд╕рддреНрдпрд╛рдкрди рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ JSON рдиреЗ рд╣рдореЗрдВ рднреЗрдЬрд╛ рд╣реИ
{ "numberKey" : 100500, "arrayKey" : [ { "number" : 1 , "string" : "1" }, { "number" : 2 , "string" : "2" }, { "number" : 3 , "string" : "3" } ] } 

рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдиреНрдпреВрдирддрдо JSON рд╕реНрдХреАрдорд╛ рд╣реЛрдЧрд╛
 { "type" : "object", "properties" : { "numberKey" : { "type" : "number" }, "arrayKey" : { "type" : "array", "items" : { "type" : "object", "properties" : { "number" : { "type" : "number" }, "string" : { "type" : "string" } } } } } } 

рд╣рдореЗрдВ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рднреЗрдЬреЗ рдЧрдП JSON рдХреЛ рд▓реЗрдирд╛ рд╣реИ рдФрд░ рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред JSON- рд╕реНрдХреАрдорд╛ JSON рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╣реИрдВред рд▓реЗрдХрд┐рди рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреА рдЦреЛрдЬ рдиреЗ рдХреЛрдИ рднреА рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдЗрдХрд┐рд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред

рдирддреАрдЬрддрди, JsonSchemaValidator ( рдмрд┐рдЯрдмрдХреЗрдЯ ) рдирд╛рдордХ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
 pod 'SVJsonSchemaValidator' 

рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдорджрдж рд╕реЗ, рд╣рдо рдПрдХ рдЖрд░реЗрдЦ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рдЖрдИрдбреА рд╕реНрдХреАрдорд╛ = [ [ SVType рдСрдмреНрдЬреЗрдХреНрдЯ ] рдЧреБрдг : @ {
@ "рдирдВрдмрд░рдХреА" : [ SVType рдирдВрдмрд░ ] ,
@ "arrayKey" : [ [ SVType array ] рдЖрдЗрдЯрдо : [ [ SVType рдСрдмреНрдЬреЗрдХреНрдЯ ] рдЧреБрдг : @ {
@ "рд╕рдВрдЦреНрдпрд╛" : [ SVType рд╕рдВрдЦреНрдпрд╛ ] ,
@ "рд╕реНрдЯреНрд░рд┐рдВрдЧ" : [ SVType string ]
} ] ]
} ] ;

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рдЧрднрдЧ рдПрдХ рд╕реЗ рдПрдХ рдпреЛрдЬрдирд╛ JSON рдХреЛ рд╣реА рджреЛрд╣рд░рд╛рддреА рд╣реИред рдЕрдм рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ:
NSError * error = nil ;
id validatedJson = [ рд╕реНрдХреАрдорд╛ validateJson : json error : & error ] ;
рдпрд╣рд╛рдБ рдЪрд░ рд╣реИрдВ:
json рдХрд┐рд╕реА рднреА рдкрд╛рд░реНрд╕рд░ (рдЬреИрд╕реЗ NSJSONSerialization рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ JSON рд╣реИред
validatedJson - рдХреЗрд╡рд▓ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛ рд╕рддреНрдпрд╛рдкрди рд╕реЗ рдЧреБрдЬрд░ рдЪреБрдХреЗ рд╣реИрдВред
рддреНрд░реБрдЯрд┐ - рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рдордЭрджрд╛рд░ рд╡рд┐рд╡рд░рдг рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред nil - рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдореЙрдбрд▓ рд╡рд░реНрдЧ рд╣реИ
@ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ MyModelObject : NSObject

@property ( рдордЬрдмреВрдд, рдЧреИрд░-рдкрд░рдорд╛рдгреБ ) NSString * рд╕реНрдЯреНрд░рд┐рдВрдЧ ;
@property ( рдордЬрдмреВрдд, рдЧреИрд░-рдкрд░рдорд╛рдгреБ ) NSNumber * рд╕рдВрдЦреНрдпрд╛;

@ рдЕрдВрдд

рдореИрдВ рдЖрд░реЗрдЦ рдореЗрдВ рджреЛрддрд░рдлрд╛ рдХрд╛рдо рдХрд░рдирд╛ рдФрд░ рдореМрдЬреВрджрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рдЖрдк рдЗрд╕ рд╡рд░реНрдЧ рд╕реЗ рд╕реАрдзреЗ рдПрдХ рд╕реНрдХреАрдорд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рдЖрдИрдбреА рд╕реНрдХреАрдорд╛ = [ [ SVType рдСрдмреНрдЬреЗрдХреНрдЯ ] рдЧреБрдг : @ {
@ "рдирдВрдмрд░рдХреА" : [ SVType рдирдВрдмрд░ ] ,
@ "arrayKey" : [ [ SVType array ] рдЖрдЗрдЯрдо : [ MyModelObject jsonSchema ] ]
} ] ;

Objc-runtime рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, MyModelObject рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП -jsonSchema рд╡рд┐рдзрд┐ рдЙрди рд╕рднреА рдЧреБрдгреЛрдВ рд╕реЗ рдЧреБрдЬрд╝рд░реЗрдЧреА, рдЬреЛ JSON рдореЗрдВ рджрд░реНрд╢рд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рдпреЛрдЬрдирд╛ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕реА рд╕реНрдХреАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк MyModelObject рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ KVC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рднрд░ рд╕рдХрддреЗ рд╣реИрдВ:
NS рдордВрджрд╛рд░ * instanciated = [ schema InstantiateValidatedJson : validated ] ;

( lldb ) рдкреЛрдП рдЗрдВрд╕реНрдЯрд┐рдВрдХреНрдЯреЗрдб
$ 1 = 0x0755fe70 {
рдирдВрдмрд░рдХреА = 100500 ,
рд╕рд░рдгреА = (
"<MyModelObject: 0x7554a30>" ,
"<MyModelObject: 0x7554610>" ,
"<MyModelObject: 0x75543b0>" ,
"<MyModelObject: 0x75619b0>"
) ;
}

рдлрд┐рд▓рд╣рд╛рд▓ рдпрд╣ рд╕рдм рд▓рд╛рдЧреВ рд╣реИред
рдФрд░ рдЕрдм рд╕рд╡рд╛рд▓, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЫреЛрдЯрд╛ рд╡рд┐рд╖рдп рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛: рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдмрд╛рдЗрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? Kamenty рдореЗрдВ рдЙрддреНрддрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

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


All Articles