
рдХрдИ рд╕реЗрд╡рд╛рдПрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рд╡рд┐рд╢реЗрд╖рдХрд░ рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдВ) рдЯреНрд░реА рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдлреЙрд░реНрдо рдореЗрдВ JSON-PRC, JSON-REST, PHP-GET / POST рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдп рдЙрдирдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рдЬрдорд╛рд╡ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рддреНрдпрд╛рдкрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрддред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдбреЗрдЯрд╛ рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрди рдорд╛рдирдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ JSON-рд╕реНрдХреАрдорд╛ рд╣реИ, рдЖрдЗрдП рдПрдХ рдХрд░реАрдм рджреЗрдЦреЗрдВред
JSON- рд╕реНрдХреАрдорд╛ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рд╣реИ, рдЬрд┐рд╕реЗ
XML-рд╕реНрдХреАрдорд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдорд╕реМрджрд╛
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ (рдиреАрдЪреЗ рд╡рд┐рд╡рд░рдг рд╕рдВрд╕реНрдХрд░рдг 03 рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛)ред рдЗрд╕ рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕реНрдХреАрдорд╛ рдореЗрдВ MIME "рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╕реНрдХреАрдорд╛ + json" рд╣реЛрддрд╛ рд╣реИред рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм рд╕рдВрдЦреНрдпрд╛рдУрдВ, рддрд╛рд░реЛрдВ, рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рд╕реЗ рдпреБрдХреНрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдорд╛рдиреНрдп рдФрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЛ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рд╡рд╕реНрддреБ, рдПрдХ рд╢рдмреНрджрдХреЛрд╢, рдПрдХ рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛, рдПрдХ рд╕рд╣рдпреЛрдЧреА рд╕рд░рдгреА рдпрд╛ рдПрдХ рдирдХреНрд╢рд╛, рдлрд┐рд░ рдирд╛рдо "рдСрдмреНрдЬреЗрдХреНрдЯ" рдпрд╛ "рдСрдмреНрдЬреЗрдХреНрдЯ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, php, рд░реВрдмреА, рдЕрдЬрдЧрд░, рдЬрд╛рд╡рд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдФрд░ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдФрд░ рдЖрдВрд╢рд┐рдХ
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ ред
рдпреЛрдЬрдирд╛
рдПрдХ рд╕реНрдХреАрдорд╛ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдг рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдо (рдмрд╛рдж рдореЗрдВ - рдирд┐рдпрдо) рдХрд╛ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдпреЛрдЬрдирд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ (рдирд┐рдпрдо рдЯрд╛рдЗрдк рдпрд╛ рдЕрд╕реНрд╡реАрдХреГрдд рд╣реИ, рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдПрдХ рд╕рд░рдгреА рд╣реЛ рд╕рдХрддреА рд╣реИ):
- рд╕реНрдЯреНрд░рд┐рдВрдЧ (рд╕реНрдЯреНрд░рд┐рдВрдЧ)
- рд╕рдВрдЦреНрдпрд╛ (рд╕рдВрдЦреНрдпрд╛, рд╕рднреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕рд╣рд┐рдд)
- рдкреВрд░реНрдгрд╛рдВрдХ (рдкреВрд░реНрдгрд╛рдВрдХ, рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдмрд╕реЗрдЯ рд╣реИ)
- рдмреВрд▓рд┐рдпрди (рд╕рдЪреНрдЪрд╛ рдпрд╛ рдЧрд▓рдд)
- рдСрдмреНрдЬреЗрдХреНрдЯ, рдПрдХ рд╡рд╕реНрддреБ, рдХреБрдЫ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрд╕реЗ рдПрдХ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА, рд╣реИрд╢, рд╣реИрд╢ рдЯреЗрдмрд▓, рдорд╛рдирдЪрд┐рддреНрд░ рдпрд╛ рд╢рдмреНрджрдХреЛрд╢ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)
- рд╕рд░рдгреА (рд╕рд░рдгреА)
- рдЕрд╢рдХреНрдд ("рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ" рдпрд╛ "рдЕрдЬреНрдЮрд╛рдд", рдХреЗрд╡рд▓ рдЕрд╢рдХреНрдд рд╕рдВрднрд╡ рд╣реИ)
- рдХреЛрдИ рднреА (рд╢реВрдиреНрдп рд╕рд╣рд┐рдд рдХреЛрдИ рднреА рдкреНрд░рдХрд╛рд░)
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд╛рдБрдЪ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЬрд╛рдБрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдбреЗрдЯрд╛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рддреЛ рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо, рд╡рд┐рднрд╛рдЬреНрдп рд╣реИред рдпрджрд┐ рдЬрд╛рдБрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдбреЗрдЯрд╛ рдПрдХ рд╕рд░рдгреА рд╣реИ, рддреЛ рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ: minItems, maxItems, uniqueItems, itemsред рдпрджрд┐ рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рддреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ: рд▓рд╛рдЧреВ рдХрд░реЗрдВ: рдкреИрдЯрд░реНрди, рдорд╛рдЗрдирд▓реЗрдВрдЧреНрде, рдореИрдХреНрд╕ рд▓рд░реНрдирд┐рдВрдЧред рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдирд┐рдпрдореЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЧреБрдг, рдкреНрд░рддрд┐рд░реВрдк, рдЕрддрд┐рд░рд┐рдХреНрддред
рдкреНрд░рдХрд╛рд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рд╣реИрдВ, рдЬреИрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдФрд░ рдкреНрд░рд╛рд░реВрдк, рд╕рд╛рде рд╣реА рд╡рд┐рд╡рд░рдгрд╛рддреНрдордХ рдирд┐рдпрдо, рдЬреИрд╕реЗ рдЖрдИрдбреА, рд╢реАрд░реНрд╖рдХ, рд╡рд┐рд╡рд░рдг, $ рд╕реНрдХреАрдорд╛ред рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрдИ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЙрд░реНрдореЗрдЯреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ: рджрд┐рдирд╛рдВрдХ-рд╕рдордп (ISO 8601), рддрд┐рдерд┐, рд╕рдордп, utc-millisec, regex, color (W3C.CR-CSS21-20070719), рд╢реИрд▓реА (WCC.CR-CSS21-20070719), рдлрд╝реЛрди рдпреВрд░реА, рдИрдореЗрд▓, рдЖрдИрдкреА-рдПрдбреНрд░реЗрд╕ (рд╡реА 4), рдЖрдИрдкреАрд╡реА 6, рд╣реЛрд╕реНрдЯ-рдирд╛рдо, рдЬрд┐рд╕реЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЗрди рдФрд░ рдЕрдиреНрдп рдирд┐рдпрдореЛрдВ рдХреЛ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд╕реНрдХреАрдорд╛ рдПрдХ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдХреАрдорд╛ рджреНрд╡рд╛рд░рд╛ рднреА рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд┐рд╕ рд╕реНрдХреАрдорд╛ рдореЗрдВ рдореМрдЬреВрджрд╛ рд╕реНрдХреАрдорд╛ рд╕рдВрдЧрдд рд╣реЛрддреА рд╣реИ, рдЙрд╕реЗ $ рд╕реНрдХреАрдорд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЙрд╕ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпреЛрдЬрдирд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрди рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ
рдпрд╣рд╛рдВ рдЦреЛрдЬреЗрдВред
JSON-Schema рдХреЗ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдЖрдХрд░реНрд╖рдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпреЛрдЬрдирд╛ рд╕реЗ рдЕрдиреНрдп рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ (рд╡рд┐рд╕реНрддрд╛рд░) (
JSON-Ref рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╣реИред рдпрд╣ рдЖрдИрдбреА, рдПрдХреНрд╕рдЯреЗрдВрдб рдФрд░ $ рд░реЗрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдирд┐рдпрдореЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдкреВрд░рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ рдХреА рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рднреА рдирд┐рдпрдореЛрдВ рдХреЛ рдЬрд╛рдВрдЪреЗ рдЬрд╛ рд░рд╣реЗ рдбреЗрдЯрд╛ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЖрдЧреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдЙрджрд╛рд╣рд░рдг
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдорд╛рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХрд╛ рдПрдХ рдирд╛рдо рд╣реИред рдпрд╣ 3 рд╕реЗ 50 рдЕрдХреНрд╖рд░реЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд┐рд░реЛрдВ рдкрд░ рдХреЛрдИ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИред рдЙрддреНрдкрд╛рдж рдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:
{ "$schema": "http://json-schema.org/draft-03/schema#",
рдЦреИрд░, рдЕрдм рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЖрдк рдЙрддреНрдкрд╛рдж рдХреЗ рдирд╛рдо рд╕реЗ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд╡рд░реНрдгрди рдпрд╛ рд╕рддреНрдпрд╛рдкрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрддреНрдкрд╛рдж рдореЗрдВ рдПрдХ рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп, рдкреНрд░рдХрд╛рд░ ('рдлреЛрди' рдпрд╛ 'рдиреЛрдЯрдмреБрдХ') рд╣реИ, рдФрд░ рд╡рд╛рдИ-рдлрд╛рдИ рдПрди рдФрд░ рдЬреА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред рдорд╛рд▓ рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
{ "$schema":"http://json-schema.org/draft-03/schema#", "id": "urn:product#", "type": "object", "additionalProperties": false, "properties": { "name": { "extends": {"$ref": "urn:product_name#"}, "required": true }, "price": { "type": "integer", "min": 0, "required": true }, "type": { "type": "string", "enum": ["phone", "notebook"], "required": true }, "wi_fi": { "type": "array", "items": { "type": "string", "enum": ["n", "g"] }, "uniqueItems": true } } }
рдпрд╣ рдпреЛрдЬрдирд╛ рдкрд┐рдЫрд▓реА рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдВрдХ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдирд┐рдпрдо рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдпрд╣ рдкрд┐рдЫрд▓реА рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╣реАрдВ рдирд╛рдо рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреЗред
рдЙрддреНрдкрд╛рджрдХрддрд╛
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ JSON-рд╕реНрдХреАрдорд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди, рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЗ рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП
рдиреЛрдбрдЬ рдкрд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдФрд░ рд╕рдмрд╕реЗ "рдкреВрд░реНрдг"
JSV рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ (рдЖрдк рдЗрд╕реЗ "npm рд╕реНрдерд╛рдкрд┐рдд JSV" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдкрд╣рд▓реЗ, рд╣рдо рдЕрдорд╛рдиреНрдп рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣рдЬрд╛рд░ рд╡рд┐рднрд┐рдиреНрди рдЙрддреНрдкрд╛рдж рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдлрд┐рд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдПрдВрдЧреЗред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред
рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ var jsv = require('JSV').JSV.createEnvironment(); console.time('load schemas'); jsv.createSchema( { "$schema": "http://json-schema.org/draft-03/schema#", "id": "urn:product_name#", "type": "string", "pattern": "^\\S.*\\S$", "minLength": 3, "maxLength": 50, } ); jsv.createSchema( { "$schema":"http://json-schema.org/draft-03/schema#", "id": "urn:product#", "type": "object", "additionalProperties": false, "properties": { "name": { "extends": {"$ref": "urn:product_name#"}, "required": true }, "price": { "type": "integer", "min": 0, "required": true }, "type": { "type": "string", "enum": ["phone", "notebook"], "required": true }, "wi_fi": { "type": "array", "items": { "type": "string", "enum": ["n", "g"] }, "uniqueItems": true } } } ); console.timeEnd('load schemas'); console.time('prepare data'); var i, j; var product; var products = []; var names = []; for (i = 0; i < 1000; i++) { product = { name: 'product ' + i }; if (Math.random() < 0.05) { while (product.name.length < 60) { product.name += 'long'; } } names.push(product.name); if (Math.random() < 0.95) { product.price = Math.floor(Math.random() * 200 - 2); } if (Math.random() < 0.95) { product.type = ['notebook', 'phone', 'something'][Math.floor(Math.random() * 3)]; } if (Math.random() < 0.5) { product.wi_fi = []; for (j = 0; j < 3; j++) { if (Math.random() < 0.5) { product.wi_fi.push(['g', 'n', 'a'][Math.floor(Math.random() * 3)]); } } } products.push(product); } console.timeEnd('prepare data'); var errors; var results = {}; var schema; var message; schema = jsv.findSchema('urn:product_name#'); console.time('names validation'); for (i = 0; i < names.length; i++) { errors = schema.validate(names[i]).errors; for (j = 0; j < errors.length; j++) { message = errors[j].message; if (!results.hasOwnProperty(message)) { results[message] = 0; } results[message]++; } } console.timeEnd('names validation'); console.dir(results); results = {}; schema = jsv.findSchema('urn:product#'); console.time('products validation'); for (i = 0; i < products.length; i++) { errors = schema.validate(products[i]).errors; for (j = 0; j < errors.length; j++) { message = errors[j].message; if (!results.hasOwnProperty(message)) { results[message] = 0; } results[message]++; } } console.timeEnd('products validation'); console.dir(results);
1000 рдЪреЗрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛рдлреА рд╕рдВрддреЛрд╖рдЬрдирдХ рд╣реИрдВред
(рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рдорд╛рдг рдЙрдЪреНрдЪ рдЧрддрд┐ рдХреЗ рдЖрджреЗрд╢ рдХрд╛
рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ )ред
рдореЗрд░реЗ рд▓реИрдкрдЯреЙрдк рдкрд░ (MBA, OSX, 1.86 GHz Core2Duo):
рдирд╛рдо рд╕рддреНрдпрд╛рдкрди: 180ms
рдЙрддреНрдкрд╛рдж рд╕рддреНрдпрд╛рдкрди: 743ms
рдирд┐рд╖реНрдХрд░реНрд╖
JSON-рд╕реНрдХреАрдорд╛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рд╣реИред рдпрд╣ рдХрдо рдкрд╛рда рд╕реНрдерд╛рди рд▓реЗрддреЗ рд╣реБрдП, XML рд╕реНрдХреАрдорд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рдкрдардиреАрдп рджрд┐рдЦрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддрд╛ рд╣реИ: POST рдЕрдиреБрд░реЛрдз рдлрд╝реЙрд░реНрдо, JSON рд░реАрд╕реНрдЯ API рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛, рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╕рдордп рдкреИрдХреЗрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝-рдЙрдиреНрдореБрдЦ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛, рдЖрджрд┐ редSON-рд╕реНрдХреАрдорд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рднред рдорд╛рдирдХреАрдХрд░рдг рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдПрдХреАрдХрд░рдг рдХреЗ рд╕рдорд░реНрдерди рдФрд░ рд╕реБрдзрд╛рд░ рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг рд╣реИред