рдПрд░рд▓рд╛рдВрдЧ рдХреЗ рд▓рд┐рдП JSON Serialization рд▓рд╛рдЗрдмреНрд░реЗрд░реА

рдЪреВрдБрдХрд┐ рд╣рдо рдЕрдкрдиреА рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдУрдкрдирд╕реЛрд░реНрд╕ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЛрд╕реЗрд╕ рдХрд╛рдлреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ - рдореБрдлреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ред

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

рдПрд░реНрд▓реИрдВрдЧ рдХреЗ рд╡рд┐рд▓реНрд╕ рдореЗрдВ

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

рдЬреЗрди

рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛: рдЬреЗрдПрд╕ рдореЗрдВ рд╕реАрдзреЗ рдореМрдЬреВрджрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдбреНрд░рд╛рдЗрдВрдЧ рдлреЙрд░реНрдо рдпрд╛ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП)? рдкрд░рд┐рдЪрд┐рдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдПрдХ рдмреНрд▓рд┐рдЯреНрдЬ-рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ "рд╣рд╡рд╛ рдореЗрдВ рд▓рдЯрдХрд╛ рд╣реБрдЖ" рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдорд╛рдирдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рддрдм JANE рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛: JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕, рдЬреЛ JS рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред JANE рдХреЛ BERT рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ Erlang рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде JS рдореЗрдВ рд▓рдЧрднрдЧ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдкреНрд░рд╛рд░реВрдк рдФрд░ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╛рд░реВрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде .hrl рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк .json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рдЬреА / рд░рд┐рдХреЙрд░реНрдб рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдПрдХ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рдПрдХ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдирд╛рдо рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИ рдФрд░ рдПрдХ рджрд┐рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдПрдХ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╢рдмреНрджрдХреЛрд╢ред
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рд╡рд░реНрдгрди рдПрдХ рд╢рдмреНрдж рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдХреБрдВрдЬреА рдФрд░ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХрд╛ рд╡рд░реНрдгрди рд╣реИред
рдлрд╝реАрд▓реНрдб рд╡рд┐рд╡рд░рдг рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд░рд┐рдХреЙрд░реНрдб рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреБрдВрдЬреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛрддреА рд╣реИред
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╖ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рдореВрд▓реНрдп рд╣реЛрддрд╛ рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреЛ рдЙрдирдХреЗ рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдФрд░ рдкрд░рдорд╛рдгреБ рдХреЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ign_undefined рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдореМрдЬреВрдж рд╣реИ рддреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЕрдирджреЗрдЦреА рдХрд░ рд░рд╣рд╛ рд╣реИред
рдПрдХ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж рд╣реБрдХ рдХреЗ рд░реВрдк рдореЗрдВ rebar рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
{post_hooks, [{'compile', './priv/recordparser ignore_undefined include/test.hrl'}]}. 

рдЙрджрд╛рд╣рд░рдг

рд░рд┐рдХреЙрд░реНрдб рдкрд░рд┐рднрд╛рд╖рд╛:
 -record(params_ping, {host :: nonempty_string()}). -record(params_tcp, {host :: list(atom()), port = 80 :: pos_integer(), timeout :: pos_integer()}). 

рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдкрд░рд┐рдгрд╛рдо .json (ign_undefined рдХреЗ рд╕рд╛рде):
 { "params_ping": { "host": { "type": { "nonempty_string": [] } } }, "params_tcp": { "host": { "type": { "list": [ { "atom": [] } ] } }, "port": { "type": { "pos_integer": [] }, "default": 80 }, "timeout": { "type": { "pos_integer": [] } } } } 

рд╡рд╣реА, рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ ign_undefined:
 { "params_ping": { "host": { "type": { "union": [ { "atom": [ "undefined" ] }, { "nonempty_string": [] } ] } } }, "params_tcp": { "host": { "type": { "union": [ { "atom": [ "undefined" ] }, { "nonempty_string": [] } ] } }, "port": { "type": { "pos_integer": [] }, "default": 80 }, "timeout": { "type": { "union": [ { "atom": [ "undefined" ] }, { "pos_integer": [] } ] } } } } 


рд▓рд┐рдВрдХ рдФрд░ рд▓реЛрдЧ

рд╣рдорд╛рд░реЗ Github рднрдВрдбрд╛рд░ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛрдб: github.com/selectel/jane
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓реЗрдЦрдХ: si14 ред
рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рдмреАрдПрд╕рдбреА-рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж akme ред

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


All Articles