{"id":308160,"date":"2020-08-07T15:01:03","date_gmt":"2020-08-07T15:01:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=308160"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=308160","title":{"rendered":"\u0418\u0433\u0440\u043e\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u043a\u0430, \u0438\u043b\u0438 \u043a\u0430\u043a \u044f \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0431\u043e\u044f\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u043b\u044e\u0431\u0438\u043b Google Apps Script"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/crazypanda\/blog\/514210\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lr\/su\/nu\/lrsunuatcbfxm7gzjtdvim_uqys.png\"><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u0443 \u0442\u0435\u043c\u0443, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043b\u044e\u0431\u043e\u0439 \u0433\u0435\u0439\u043c-\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440. \u0418 \u044d\u0442\u0430 \u0442\u0435\u043c\u0430 \u2014 <s>\u0431\u043e\u043b\u044c \u0438 \u0441\u0442\u0440\u0430\u0434\u0430\u043d\u0438\u044f<\/s> \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e <abbr title=\"Static Game Data\">\u0441\u0442\u0430\u0442\u0438\u043a\u043e\u0439<\/abbr>. \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u0442\u0430\u0442\u0438\u043a\u0430? \u0415\u0441\u043b\u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435 <abbr title=\"\u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0433\u0440\u043e\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\">\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435<\/abbr> \u0434\u0430\u043d\u043d\u044b\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0433\u0440\u043e\u043a, \u0431\u0443\u0434\u044c \u0442\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0435\u0433\u043e \u043e\u0440\u0443\u0436\u0438\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u0437\u0435\u043c\u0435\u043b\u044c\u044f \u0438 \u0435\u0433\u043e \u043e\u0431\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0443 \u0432\u0430\u0441 \u0432 \u0438\u0433\u0440\u0435 \u0435\u0441\u0442\u044c 100500 \u0432\u0438\u0434\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0447\u0435\u0439 \u0438 \u0438\u043c \u0432\u0441\u0435\u043c \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u043d. \u041e\u0431\u044b\u0447\u043d\u043e, \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u043f\u0440\u044f\u0433\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0439 \u0434\u043e\u0431\u0440\u044b\u0439 \u044d\u043a\u0441\u0435\u043b\u044c, \u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u0442\u0435\u043c \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 JSON\/XML \u0440\u0443\u043a\u0430\u043c\u0438 \u0438\u043b\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043e\u043a, \u043d\u043e \u044d\u0442\u043e \u0434\u043e\u043b\u0433\u043e, \u0445\u043b\u043e\u043f\u043e\u0442\u043d\u043e \u0438 \u0447\u0440\u0435\u0432\u0430\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c Google Spreadsheets \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u043d\u0435\u0433\u043e <a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\">Google Apps Script<\/a> \u0438 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0417\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c, \u0447\u0442\u043e \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0441\u0442\u0430\u0442\u0438\u043a\u0435 \u0434\u043b\u044f <abbr title=\"Free to play \u0438\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u043d\u043e-\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0438\u0433\u0440\u044b\">f2p<\/abbr>-\u0438\u0433\u0440 \u0438\u043b\u0438 \u0438\u0433\u0440-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u044b \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u043a \u0438 \u043f\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430, \u0442.\u0435. \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u00b1 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u0435\u043d.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u0445 \u0436\u0435 \u043c\u0435\u0447\u0435\u0439 \u0432\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438:<\/p>\n<ol>\n<li>\u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0443\u0440\u043e\u043d\u0430 (\u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446);<\/li>\n<li>\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u0434\u043e\u0431\u0440\u043e\u043c \u044d\u043a\u0441\u0435\u043b\u0435;<\/li>\n<li>\u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0438\u0433\u0440\u043e\u0432\u044b\u0435 JSON-\u044b.<\/li>\n<\/ol>\n<p>  \u0414\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u043e\u043d \u0432\u0430\u0441 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u2014 \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a, \u043a\u0430\u043a \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438. \u041d\u043e \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043d\u0435\u0442? \u0418\u043b\u0438 \u0435\u0449\u0435 \u0445\u0443\u0436\u0435, \u043d\u0435\u0442 \u0441\u0430\u043c\u043e\u0439 \u0438\u0433\u0440\u044b, \u0442.\u043a. \u043e\u043d\u0430 \u0435\u0449\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435? \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0448\u0438\u0442\u044c, \u0433\u0434\u0435 \u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u043a\u0430\u043a\u0430\u044f \u0443 \u043d\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. <\/p>\n<p>  \u0421 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435 \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e: \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0441\u0442\u0430\u0442\u0438\u043a\u0430 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 JSON-\u043e\u0432, \u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0433\u0434\u0435-\u0442\u043e \u0432 <abbr title=\"Version Control System, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 git \u0438\u043b\u0438 svn\">VCS<\/abbr>. \u0411\u044b\u0432\u0430\u044e\u0442, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0431\u043e\u043b\u0435\u0435 \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 (\u0438\u043b\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c) \u0431\u0430\u0437\u0435, \u0438\u043b\u0438, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0435, \u0432 XML. \u041d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0438\u0445, \u0430 \u043d\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 JSON, \u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u0441\u043e\u043c\u044b\u0435 \u043d\u0430 \u0442\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u0442.\u043a. \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u0442\u0430\u0442\u0438\u043a\u0438 \u0438 \u0435\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u043d\u0438\u0447\u0442\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442 \u043f\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Notepad++ \u0432\u043a\u0443\u043f\u0435 \u0441 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430\u043c\u0438, \u043d\u043e \u043d\u0430\u043c \u0432\u0441\u0435 \u0436\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u0438\u043c \u043f\u043e\u0440\u043e\u0433\u043e\u043c \u0432\u0445\u043e\u0434\u0430 \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e\u043c \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043b\u0438\u0447\u043d\u043e \u043c\u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u0435\u043b \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043c\u043d\u043e\u0433\u0438\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 Google Spreadsheets. \u041a\u0430\u043a \u0438 \u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u043b\u044e\u0441\u044b \u0438 \u043c\u0438\u043d\u0443\u0441\u044b. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0445 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0413\u0414.<\/p>\n<div class=\"scrollable-table\">\n<table>\n<tr>\n<th><b>\u041f\u043b\u044e\u0441\u044b<\/b><\/th>\n<th><b>\u041c\u0438\u043d\u0443\u0441\u044b<\/b><\/th>\n<\/tr>\n<tr>\n<td>\n<ul>\n<li>\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/li>\n<li>\u0423\u0434\u043e\u0431\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043f\u0440\u0435\u0434\u0448\u0438\u0442\u043e\u0432<\/li>\n<li>\u041c\u0430\u043a\u0440\u043e\u0441\u044b (Google Apps Script)<\/li>\n<li>\u0415\u0441\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u044f\u0447\u0435\u0439\u043a\u0438)<\/li>\n<li>\u0420\u043e\u0434\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 Google Drive \u0438 \u043f\u0440\u043e\u0447\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438<\/li>\n<\/ul>\n<p>   <\/td>\n<td>\n<ul>\n<li>\u041b\u0430\u0433\u0430\u0435\u0442 \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u043e\u0440\u043c\u0443\u043b<\/li>\n<li>\u041d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0442\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439<\/li>\n<li>\u041b\u0438\u043c\u0438\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 (6 \u043c\u0438\u043d\u0443\u0442)<\/li>\n<li>\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 nested JSON-\u043e\u0432<\/li>\n<\/ul>\n<p>   <\/td>\n<\/tr>\n<\/table>\n<\/div>\n<p>  \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u043f\u043b\u044e\u0441\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0448\u0438\u0432\u0430\u043b\u0438 \u043c\u0438\u043d\u0443\u0441\u044b, \u0438 \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0439\u0442\u0438 \u043e\u0431\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0443\u0442\u044c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u0438\u043d\u0443\u0441\u043e\u0432.<\/p>\n<h2>\u0427\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432 \u0438\u0442\u043e\u0433\u0435?<\/h2>\n<p>  \u0412 Google Spreadsheets \u0441\u0434\u0435\u043b\u0430\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u043b\u0438\u0441\u0442 Main, \u0433\u0434\u0435 \u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u043e\u0439, \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u0441\u0442\u044b, \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442. <br \/>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 nested JSON \u0443\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043f\u043b\u043e\u0441\u043a\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0438\u0437\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043c\u044b \u0438\u043c\u0435\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 JSON:<\/p>\n<pre><code class=\"javascript\">{   &quot;test_craft_01&quot;: {     &quot;id&quot;: &quot;test_craft_01&quot;,     &quot;tags&quot;: [ &quot;base&quot; ], \t&quot;price&quot;: [ {&quot;ident&quot;: &quot;wood&quot;, &quot;count&quot;:100}, {&quot;ident&quot;: &quot;iron&quot;, &quot;count&quot;:30} ], \t&quot;result&quot;: { \t\t&quot;type&quot;: &quot;item&quot;, \t\t&quot;id&quot;: &quot;sword&quot;, \t\t&quot;rarity_wgt&quot;: { &quot;common&quot;: 100, &quot;uncommon&quot;: 300 } \t}   },   &quot;test_craft_02&quot;: {     &quot;id&quot;: &quot;test_craft_02&quot;, \t&quot;price&quot;: [ {&quot;ident&quot;: &quot;sword&quot;, &quot;rarity&quot;: &quot;uncommon&quot;, &quot;count&quot;:1} ], \t&quot;result&quot;: { \t\t&quot;type&quot;: &quot;item&quot;, \t\t&quot;id&quot;: &quot;shield&quot;, \t\t&quot;rarity_wgt&quot;: { &quot;common&quot;: 100 } \t}   } } <\/code><\/pre>\n<p>  \u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0442\u0430\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u0430\u0440\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u201c\u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c\u201d \u2014 \u201c\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u201d. \u041e\u0442\u0441\u044e\u0434\u0430 \u0440\u043e\u0434\u0438\u043b\u0441\u044f \u0441\u0430\u043c\u043e\u043f\u0430\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u043f\u0443\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c:<\/p>\n<ul>\n<li><b>text<\/b> \u2014 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0438\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442<\/li>\n<li><b>\/<\/b> \u2014 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438<\/li>\n<li><b>text[]<\/b> \u2014 \u043c\u0430\u0441\u0441\u0438\u0432<\/li>\n<li><b>#number<\/b> \u2014 \u0438\u043d\u0434\u0435\u043a\u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435<\/li>\n<\/ul>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 JSON \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hv\/7f\/64\/hv7f64jwvlfcvthahixa3zj1bpa.png\"><\/p>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u2014 \u044d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438, \u0435\u0441\u043b\u0438 \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0431\u044b\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u0441\u043e\u0431\u044b\u0435 \u043f\u043e\u043b\u044f, \u2014 \u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0442\u0440\u043e\u043a \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0432 keypath.<\/p>\n<p>  \u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 root \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0440\u043e\u0432\u043d\u0438 \u2014 \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0432 \u0446\u0435\u043b\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e: \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0435, \u0442\u043e \u043c\u044b \u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 JSON \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u043c. <\/p>\n<p>  \u041d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0436\u0435 \u0432 JSON \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0438 \u043a\u0442\u043e-\u0442\u043e \u043e\u0448\u0438\u0431\u0435\u0442\u0441\u044f \u0432 \u043f\u0443\u0442\u0438 \u2014 \u043e\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u043e\u0439 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"javascript\">=if( LEN( REGEXREPLACE(your_cell_name, &quot;^[a-zA_Z0-9_]+(\\[\\])*(\\\/[a-zA_Z0-9_]+(\\[\\])*|\\\/\\#*[0-9]+(\\[\\])*)*&quot;, &quot;&quot;))&gt;0, true, false)<\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043b\u0438\u0441\u0442 Main, \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0434\u043b\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 #ACTION \u0438\u2026 <br \/>  \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u041f\u0430\u043b\u043f\u0430\u0442\u0438\u043d\u0430 ( \u0361\u00b0 \u035c\u0296 \u0361\u00b0) <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ze\/i-\/oa\/zei-oaz30bkcx5iuo6zcos9l3js.png\"><\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u044c\u043c\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043b\u0438\u0441\u0442\u043e\u0432, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u043e\u043b\u0435 #OBJECT, \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442 \u0438\u0445 \u0432 JSON. \u041f\u0443\u0442\u044c \u0434\u043b\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u0443\u043a\u0430\u0437\u0430\u043d \u0432 \u043f\u043e\u043b\u0435 #PATH, \u0430 \u043c\u0435\u0441\u0442\u043e, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d \u0444\u0430\u0439\u043b, \u2014 \u044d\u0442\u043e \u0432\u0430\u0448 \u043b\u0438\u0447\u043d\u044b\u0439 Google Drive, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043a \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 Google, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442. <\/p>\n<p>  \u041f\u043e\u043b\u0435 #METHOD \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u0438\u0442\u044c JSON:<\/p>\n<ul>\n<li>\u0415\u0441\u043b\u0438 <b>single<\/b> \u2014 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u0440\u0430\u0432\u043d\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (\u0431\u0435\u0437 \u044d\u043c\u043e\u0434\u0437\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043e\u043d\u0438 \u0442\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438)<\/li>\n<li>\u0415\u0441\u043b\u0438 <b>separate<\/b> \u2014 \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043b\u0438\u0441\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 JSON.<\/li>\n<\/ul>\n<p>  \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043f\u043e\u043b\u044f \u043d\u043e\u0441\u044f\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u043d\u044f\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u043e \u043a \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0438 \u043a\u0442\u043e \u0438\u0445 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c. <\/p>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <i>\u0447\u0435\u0441\u0442\u043d\u044b\u0439<\/i> \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043f\u0440\u0435\u0434\u0448\u0438\u0442\u043e\u0432: \u043f\u043e\u0432\u0435\u0441\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u2014 \u043c\u043e\u0436\u043d\u043e, \u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u2014 \u043d\u0435\u043b\u044c\u0437\u044f. \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0444\u0440\u0443\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0441 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043e\u043c \u0438 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0438\u0434\u0435\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u0441\u0430\u043c\u0438\u0445 \u043b\u0438\u0441\u0442\u043e\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. <\/p>\n<p>  \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u044f\u043a\u043e\u0440\u044f <b>###data###<\/b> \u0438 <b>###end_data###<\/b> \u043d\u0430 \u043b\u0438\u0441\u0442\u0430\u0445 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<h2>\u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438<\/h2>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0431\u043e\u0440 JSON-a \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u0434\u0430:<\/p>\n<ol>\n<li>\u0411\u0435\u0440\u0435\u043c \u043f\u043e\u043b\u0435 #OBJECT \u0438 \u0438\u0449\u0435\u043c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u0441\u0442\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c\n<pre><code class=\"javascript\">var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name)<\/code><\/pre>\n<\/li>\n<li>\u0418\u0449\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u044f\u043a\u043e\u0440\u0435\u0439, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u0441\u0442\u0430 (\u0438\u0434\u0435\u043c \u043f\u043e \u0440\u044d\u043d\u0436\u0443 \u043a\u0430\u043a \u043f\u043e \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0443 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c == \u0442\u0435\u043a\u0441\u0442\u0443 \u044f\u043a\u043e\u0440\u044f)\n<pre><code class=\"javascript\">function GetAnchorCoordsByName(anchor, data){   var coords = { x: 0, y: 0 }      for(var row=0; row&lt;data.length; row++){     for(var column=0; column&lt;data[row].length; column++){       if(data[row][column] == anchor){         coords.x = column;         coords.y = row;         }     }   }   return coords; } <\/code><\/pre>\n<\/li>\n<li>\u041e\u0442\u0440\u0435\u0437\u0430\u0435\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f (\u0434\u043b\u044f \u043d\u0438\u0445 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441 \u044f\u043a\u043e\u0440\u0435\u043c ###enable### \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c true|false)\n<pre><code class=\"javascript\">function FilterActiveData(data, enabled){     for(var column=enabled.x+1; column&lt;data[enabled.y].length; column++){     if(!data[enabled.y][column]){       for(var row=0; row&lt;data.length; row++){         data[row].splice(column, 1);       }       column--;     }   }   return data } <\/code><\/pre>\n<\/li>\n<li>\u041e\u0442\u0440\u0435\u0437\u0430\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u044f\u043a\u043e\u0440\u0435\u0439 <b>###data###<\/b> \u0438 <b>###end_data###<\/b>\n<pre><code class=\"javascript\">function FilterDataByAnchors(data, start, end){   data.splice(end.y)   data.splice(0, start.y+1);      for(var row=0; row&lt;data.length; row++){     data[row].splice(0,start.x);   }   return data; } <\/code><\/pre>\n<\/li>\n<li>\u0417\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0435\u0439 \u043d\u0430\u0448\u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432\n<pre><code class=\"javascript\">function GetJsonKeys(data){   var keys = [];      for(var i=1; i&lt;data.length; i++){     keys.push(data[i][0])   }   return keys; } <\/code><\/pre>\n<\/li>\n<li>\u041f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c\u0441\u044f \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0443\n<pre><code class=\"javascript\">\/\/\u041d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.  \/\/\u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0438\u0434\u0435\u0442 \u043a\u0430\u043a single-file, - \u0441\u044e\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432\u0441\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0441 \u043b\u0438\u0441\u0442\u0430.  \/\/\u0418\u043d\u0430\u0447\u0435 - \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043e separate JSON-\u043e\u0432 function PrepareJsonData(filteredData){   var keys = GetJsonKeys(filteredData)      var jsonData = [];   for(var i=1; i&lt;filteredData[0].length; i++){     var objValues = GetObjectValues(filteredData, i);        var jsonObject = {       &quot;objName&quot;: filteredData[0][i],       &quot;jsonBody&quot;: ParseToJson(keys, objValues)     }     jsonData.push(jsonObject)   }     return jsonData; }  \/\/\u0423\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0432 JSON \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (\u043f\u0430\u0440\u044b \u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435) function ParseToJson(fields, values){   var outputJson = {};   for(var field in fields){     if( IsEmpty(fields[field]) || IsEmpty(values[field]) ){        continue;      }     var key = fields[field];     var value = values[field];          var jsonObject = AddJsonValueByPath(outputJson, key, value);   }   return outputJson; }  \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0432 JSON \u043f\u043e \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 function AddJsonValueByPath(jsonObject, path, value){   if(IsEmpty(value)) return jsonObject;      var nodes = PathToArray(path);   AddJsonValueRecursive(jsonObject, nodes, value);      return jsonObject; }  \/\/\u0420\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c string \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043f\u043e\u043b\u044f \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b function PathToArray(path){   if(IsEmpty(path)) return [];   return path.split(&quot;\/&quot;); }  \/\/\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u043d\u043e\u0434\u0430 \u0430\u0434\u0440\u0435\u0441\u0430, \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 - \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c function AddJsonValueRecursive(jsonObject, nodes, value){   var node = nodes[0];      if(nodes.length &gt; 1){     AddJsonNode(jsonObject, node);     var cleanNode = GetCleanNodeName(node);     nodes.shift();     AddJsonValueRecursive(jsonObject[cleanNode], nodes, value)   }   else {     var cleanNode = GetCleanNodeName(node);     AddJsonValue(jsonObject, node, value);   }   return jsonObject; }  \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0432\u0448\u0443\u044e \u043d\u043e\u0434\u0443 \u0432 JSON. \u0418\u043d\u0434\u0435\u043a\u0441\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. function AddJsonNode(jsonObject, node){   if(jsonObject[node] != undefined) return jsonObject;   var type = GetNodeType(node);   var cleanNode = GetCleanNodeName(node);      switch (type){     case &quot;array&quot;:       if(jsonObject[cleanNode] == undefined) {         jsonObject[cleanNode] = []       }       break;     case &quot;nameless&quot;:        AddToArrayByIndex(jsonObject, cleanNode);       break;     default:         jsonObject[cleanNode] = {}   }   return jsonObject; }  \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443 function AddToArrayByIndex(array, index){   if(array[index] != undefined) return array;      for(var i=array.length; i&lt;=index; i++){     array.push({});   }   return array; }  \/\/\u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c (\u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0434\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430) function AddJsonValue(jsonObject, node, value){   var type = GetNodeType(node);   var cleanNode = GetCleanNodeName(node);   switch (type){     case &quot;array&quot;:       if(jsonObject[cleanNode] == undefined){         jsonObject[cleanNode] = [];       }       jsonObject[cleanNode].push(value);       break;     default:       jsonObject[cleanNode] = value;   }   return jsonObject }  \/\/\u0423\u0437\u043d\u0430\u0435\u043c \u0442\u0438\u043f \u043d\u043e\u0434\u044b. \/\/\u0415\u0441\u043b\u0438 object - \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u043f\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u0443 \/\/\u0415\u0441\u043b\u0438 array - \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0435\u0433\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442 \/\/\u0415\u0441\u043b\u0438 nameless - \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0432\u044b\u0448\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c, \u0438 \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u0442 - \u0441\u043e\u0437\u0434\u0430\u0435\u043c function GetNodeType(key){   var reArray       = \/\\[\\]\/   var reNameless    = \/#\/;      if(key.match(reArray) != null) return &quot;array&quot;;   if(key.match(reNameless) != null) return &quot;nameless&quot;;      return &quot;object&quot;; }  \/\/\u0412\u044b\u0447\u0438\u0449\u0430\u0435\u043c \u0438\u0437 \u0438\u043c\u0435\u043d\u0438 \u043d\u043e\u0434\u044b \u043f\u0441\u0435\u0432\u0434\u043e\u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0432 JSON function GetCleanNodeName(node){   var reArray       = \/\\[\\]\/;   var reNameless    = \/#\/;      node = node.replace(reArray,&quot;&quot;);      if(node.match(reNameless) != null){     node = node.replace(reNameless, &quot;&quot;);     node = GetNodeValueIndex(node);   }   return node }  \/\/\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437 nameless-\u043e\u0431\u044a\u0435\u043a\u0442\u0430 function GetNodeValueIndex(node){   var re = \/[^0-9]\/   if(node.match(re) != undefined){     throw new Error(&quot;Nameless value key must be: '#[0-9]+'&quot;)   }   return parseInt(node-1) } <\/code><\/pre>\n<\/li>\n<li>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 JSON \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 Google Drive\n<pre><code class=\"javascript\">\/\/\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0435\u0442\u043e\u0434, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c: \u043f\u0443\u0442\u044c, \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 (\u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c) \u0438 string \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. function CreateFile(path, filename, data){   var folder = GetFolderByPath(path)       var isDuplicateClear = DeleteDuplicates(folder, filename)   folder.createFile(filename, data, &quot;application\/json&quot;)   return true; }  \/\/\u0418\u0449\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0432 GoogleDrive \u043f\u043e \u043f\u043e\u043b\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 function GetFolderByPath(path){   var parsedPath = ParsePath(path);   var rootFolder = DriveApp.getRootFolder()   return RecursiveSearchAndAddFolder(parsedPath, rootFolder); }  \/\/\u0420\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435 \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b function ParsePath(path){   while ( CheckPath(path) ){     var pathArray = path.match(\/\\w+\/g);     return pathArray;   }   return undefined; }  \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0443\u0442\u0438 function CheckPath(path){   var re = \/\\\/\\\/(\\w+\\\/)+\/;   if(path.match(re)==null){     throw new Error(&quot;File path &quot;+path+&quot; is invalid, it must be: '\/\/...\/'&quot;);   }   return true; }  \/\/\u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b, - \u043c\u0430\u0440\u043a\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0430\u0440\u044b\u0439 \u043d\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435.  \/\/\u0418\u043d\u0430\u0447\u0435 - \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0442.\u043a. \u0441\u0442\u0430\u0440\u044b\u0439 \u0441\u0430\u043c \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u0441\u044f function DeleteDuplicates(folder, filename){   var duplicates = folder.getFilesByName(filename);      while ( duplicates.hasNext() ){     duplicates.next().setTrashed(true);   } }  \/\/\u0428\u0442\u0430\u0442\u043d\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043f\u0443\u0442\u0438 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0438\u0434\u0435\u043c \u043e\u0442 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0432\u043d\u0438\u0437 \u0434\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e, \u0438\u0449\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u043f\u0443\u0442\u0438 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 function RecursiveSearchAndAddFolder(parsedPath, parentFolder){   if(parsedPath.length == 0) return parentFolder;       var pathSegment = parsedPath.splice(0,1).toString();    var folder = SearchOrCreateChildByName(parentFolder, pathSegment);      return RecursiveSearchAndAddFolder(parsedPath, folder); }  \/\/\u0418\u0449\u0435\u043c \u0432 parent \u043f\u0430\u043f\u043a\u0443 name, \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 - \u0441\u043e\u0437\u0434\u0430\u0435\u043c function SearchOrCreateChildByName(parent, name){   var childFolder = SearchFolderChildByName(parent, name);       if(childFolder==undefined){     childFolder = parent.createFolder(name);   }   return childFolder }  \/\/\u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 parent \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f name \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 function SearchFolderChildByName(parent, name){   var folderIterator = parent.getFolders();      while (folderIterator.hasNext()){     var child = folderIterator.next();     if(child.getName() == name){        return child;     }   }   return undefined; } <\/code><\/pre>\n<\/li>\n<\/ol>\n<p>  \u0413\u043e\u0442\u043e\u0432\u043e! \u0422\u0435\u043f\u0435\u0440\u044c \u0438\u0434\u0435\u043c \u0432 Google Drive \u0438 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0430\u043c \u0441\u0432\u043e\u0439 \u0444\u0430\u0439\u043b\u0438\u043a.<\/p>\n<p>  \u0414\u043b\u044f \u0447\u0435\u0433\u043e \u0431\u044b\u043b\u0430 \u043d\u0443\u0436\u043d\u0430 \u0432\u043e\u0437\u043d\u044f \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0432 Google Drive, \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u043f\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0432 \u0433\u0438\u0442? \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d\u0438 \u0443\u043b\u0435\u0442\u0435\u043b\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 <s>\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u043b\u0438 \u043d\u0435\u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043c\u043e\u0435<\/s>. \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u2014 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0448\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. <\/p>\n<p>  \u0427\u0435\u0433\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c: \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 A\/B-\u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0442\u043a\u0438 \u0441\u0442\u0430\u0442\u0438\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043a\u043e\u043f\u0438\u044f \u0434\u0438\u043a\u0442\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043b\u044f A\/B-\u0442\u0435\u0441\u0442\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c \u0441\u043f\u0440\u0435\u0434\u0448\u0438\u0442, \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u0435\u043c \u0438 \u0443\u0436\u0435 \u043e\u0442\u0442\u0443\u0434\u0430 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0430.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041a\u0430\u043a \u0432 \u0438\u0442\u043e\u0433\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435? \u041d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u044b\u0441\u0442\u0440\u043e. \u041f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0445 \u0440\u0430\u0431\u043e\u0442 \u0438 \u0442\u0430\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u043f\u0440\u0435\u0434\u0448\u0438\u0442\u0430\u0445, \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443. <\/p>\n<p>  \u0417\u0430 \u0441\u0447\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u044b, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0438\u0435 \u043a \u043a\u0430\u0441\u043a\u0430\u0434\u043d\u044b\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c, \u0442\u0430\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0447\u0435\u043c\u0443 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c. \u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0431\u0430\u043b\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0442.\u043a. \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 \u043b\u0438\u0441\u0442, \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0431\u0443\u0442\u044b\u043b\u043e\u0447\u043d\u044b\u043c \u0433\u043e\u0440\u043b\u044b\u0448\u043a\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f API Google Drive: \u043f\u043e\u0438\u0441\u043a \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435\/\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0437\u0434\u0435\u0441\u044c \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0435 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u0440\u0430\u0437\u0443 \u0438\u043b\u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u043b\u0438\u0441\u0442\u0430 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0430 \u0435\u0434\u0438\u043d\u044b\u043c JSON-\u043e\u043c. <\/p>\n<p>  \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043b\u0443\u0431\u043e\u043a \u0438\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0432\u0441\u0435 \u0435\u0449\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442 JSON-\u044b \u0440\u0443\u043a\u0430\u043c\u0438 \u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0431\u0430\u043b\u0430\u043d\u0441\u043d\u044b\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0441\u0442\u0430\u0442\u0438\u043a\u0438 \u0432 Excel \u0432\u043c\u0435\u0441\u0442\u043e Google Spreadsheets.<\/p>\n<h2>\u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1YhVCx4rpczh_iy-sxq9qIPlTVAO4FhAaXl1J_i5KC_U\/edit?usp=sharing\">\u0441\u043f\u0440\u0435\u0434\u0448\u0438\u0442\u0430-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430<\/a><br \/>  \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 <a href=\"https:\/\/script.google.com\/d\/1QIacKDekigkBtH8RLYuV9n2g_7M7oswH3x9r6VTVfm5pKch6tnLrRRRk\/edit\">Google Apps Script<\/a><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/crazypanda\/blog\/514210\/\"> https:\/\/habr.com\/ru\/company\/crazypanda\/blog\/514210\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/crazypanda\/blog\/514210\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lr\/su\/nu\/lrsunuatcbfxm7gzjtdvim_uqys.png\"><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u0443 \u0442\u0435\u043c\u0443, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043b\u044e\u0431\u043e\u0439 \u0433\u0435\u0439\u043c-\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440. \u0418 \u044d\u0442\u0430 \u0442\u0435\u043c\u0430 \u2014 <s>\u0431\u043e\u043b\u044c \u0438 \u0441\u0442\u0440\u0430\u0434\u0430\u043d\u0438\u044f<\/s> \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e <abbr title=\"Static Game Data\">\u0441\u0442\u0430\u0442\u0438\u043a\u043e\u0439<\/abbr>. \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u0442\u0430\u0442\u0438\u043a\u0430? \u0415\u0441\u043b\u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u2014 \u044d\u0442\u043e \u0432\u0441\u0435 <abbr title=\"\u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0433\u0440\u043e\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\">\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435<\/abbr> \u0434\u0430\u043d\u043d\u044b\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0433\u0440\u043e\u043a, \u0431\u0443\u0434\u044c \u0442\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0435\u0433\u043e \u043e\u0440\u0443\u0436\u0438\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u0437\u0435\u043c\u0435\u043b\u044c\u044f \u0438 \u0435\u0433\u043e \u043e\u0431\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0443 \u0432\u0430\u0441 \u0432 \u0438\u0433\u0440\u0435 \u0435\u0441\u0442\u044c 100500 \u0432\u0438\u0434\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0447\u0435\u0439 \u0438 \u0438\u043c \u0432\u0441\u0435\u043c \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u043d. \u041e\u0431\u044b\u0447\u043d\u043e, \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u043f\u0440\u044f\u0433\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0439 \u0434\u043e\u0431\u0440\u044b\u0439 \u044d\u043a\u0441\u0435\u043b\u044c, \u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u0442\u0435\u043c \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 JSON\/XML \u0440\u0443\u043a\u0430\u043c\u0438 \u0438\u043b\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043e\u043a, \u043d\u043e \u044d\u0442\u043e \u0434\u043e\u043b\u0433\u043e, \u0445\u043b\u043e\u043f\u043e\u0442\u043d\u043e \u0438 \u0447\u0440\u0435\u0432\u0430\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c Google Spreadsheets \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u043d\u0435\u0433\u043e <a href=\"https:\/\/developers.google.com\/apps-script\/reference\/spreadsheet\">Google Apps Script<\/a> \u0438 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-308160","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/308160","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=308160"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/308160\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=308160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=308160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=308160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}