Skip to content

Commit f5a7258

Browse files
committed
Добавлена возможность изменения настроек автоматического маскирования символов
1 parent 0a5f578 commit f5a7258

File tree

2 files changed

+115
-63
lines changed

2 files changed

+115
-63
lines changed

src/json.os

Lines changed: 29 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
// МаскированиеКириллицы – маскирование кириллических символов современных алфавитов славянских языков.
107107
// Настройка изменяется в функции "НастройкаМаскированиеКириллицы" (по умолчанию отключена).
108108
// Не рекомендуется к использованию, так как влияет на производительность.
109-
// Маскирование специальных символов из диапазона [0x0000, 0x001f] выполняется в не зависимости от настройки.
109+
// Маскирование специальных символов из диапазона [0x0000, 0x001f] выполняется вне зависимости от настройки.
110110
//
111111
// НеявноеПриведениеПримитивныхЗначенийКлюча – неявное приведение примитивных значений ключей соответствий к строке.
112112
// Настройка изменяется в функции "НеявноеПриведениеПримитивныхЗначенийКлюча" (по умолчанию отключена).
@@ -254,10 +254,9 @@
254254
// АвтоматическиПриводитьОбъектыКСтруктуре - Булево. Определяет, нужно ли автоматически приводить объект к Структуре или к Соответствию.
255255
// - Истина - выполняется автоматическое приведение объекта к структуре;
256256
// - Ложь - автоматическое приведение объекта к структуре не выполняется, все объекты преобразуются в соответствие (значение по умолчанию).
257-
//
258-
// Примечание:
259-
// Автоматическое приведение к структуре выполняется только для объектов имена свойств которых могут быть
260-
// использованы как ключи структуры, все остальные объекты преобразуются в соответствие.//
257+
// Примечание:
258+
// Автоматическое приведение к структуре выполняется только для объектов имена свойств которых могут быть
259+
// использованы как ключи структуры, все остальные объекты преобразуются в соответствие.//
261260
//
262261
// Возвращаемое значение:
263262
// Набор данных согласно содержимому входящих данных.
@@ -281,67 +280,35 @@
281280
// - Истина - ссылки передаются вместе со своим представлением, как объекты с двумя свойствами содержащими саму ссылку и ее представление;
282281
// - Ложь - ссылки передаются без представления (значение по умолчанию).
283282
//
284-
// Возвращаемое значение:
285-
// Строка. Строка данных в формате JSON согласно содержимому входящих данных.
286-
//
287-
Функция ЗаписатьJSON(Значение, Стандарт = Истина, ПредставленияСсылок = Ложь) Экспорт
288-
289-
Возврат jsonЗаписатьИнициализация(Значение, Стандарт, ПредставленияСсылок);
290-
291-
КонецФункции // ЗаписатьJSON()
292-
293-
294-
// ─────────────────────────────────────────────────────────────────────────────
295-
// НАСТРОЙКИ
296-
297-
// Функция управляющая настройкой "ПолноеМаскированиеСимволов".
298-
//
299-
// Возвращаемое значение:
300-
// Булево. Значение настройки:
301-
// - Истина - выполняется полное маскирование символов некорректно обрабатываемых JavaScript-ом;
302-
// - Ложь - маскирование выполняется только согласно стандарту и дополнительно маскируются специальные символы.
303-
//
304-
// Примечание:
305-
// Маскирование специальных символов из диапазона [0x0000, 0x001f] выполняется в не зависимости от настройки.
306-
//
307-
Функция НастройкаПолноеМаскированиеСимволов()
308-
309-
Возврат Истина; // Измените для неполного маскирования символов.
310-
311-
КонецФункции // НастройкаПолноеМаскированиеСимволов()
312-
313-
// Функция управляющая настройкой "МаскированиеКириллицы".
283+
// МаскироватьСимволыПолностью - Булево. Значения:
284+
// - Истина - выполняется полное маскирование символов некорректно обрабатываемых JavaScript-ом (значение по умолчнию);
285+
// - Ложь - маскирование выполняется только согласно стандарту и дополнительно маскируются специальные символы.
286+
// Примечание:
287+
// Маскирование специальных символов из диапазона [0x0000, 0x001f] выполняется в не зависимости от настройки.
314288
//
315-
// Возвращаемое значение:
316-
// Булево. Значение настройки:
289+
// МаскироватьКириллицу - Булево. Значение настройки:
317290
// - Истина - выполняется маскирование кириллических символов;
318-
// - Ложь - маскирование выполняется только согласно стандарту и дополнительно маскируются специальные символы.
319-
//
320-
// Примечание:
321-
// Маскирование специальных символов из диапазона [0x0000, 0x001f] выполняется в не зависимости от настройки.
322-
//
323-
Функция НастройкаМаскированиеКириллицы()
324-
325-
Возврат Ложь; // Измените для маскирования кириллических символов.
326-
327-
КонецФункции // НастройкаМаскированиеКириллицы()
328-
329-
// Функция управляющая настройкой "НеявноеПриведениеПримитивныхЗначенийКлюча".
291+
// - Ложь - маскирование выполняется только согласно стандарту и дополнительно маскируются специальные символы (значение по умолчанию)
292+
// Примечание:
293+
// Маскирование специальных символов из диапазона [0x0000, 0x001f] выполняется в не зависимости от настройки.
330294
//
331-
// Возвращаемое значение:
332-
// Булево. Значение настройки:
295+
// НеявноПриводитьПримитивныеЗначенияКлюча - Булево. Значение настройки:
333296
// - Истина - выполняется неявное приведение примитивных типов значений ключей соответствий к их строковому представлению в формате 1С;
334297
// - Ложь - неявное приведение примитивных типов значений ключей соответствий к строковому представлению не выполняется.
298+
// Примечание:
299+
// Неявно приводимые типы: Null, Булево, Число, Дата, Строка, УникальныйИдентификатор.
300+
// TODO: В настоящий момент не поддерживаются в связи с необходимостью использования объекта ОписаниеТипов();
335301
//
336-
// Примечание:
337-
// Неявно приводимые типы: Null, Булево, Число, Дата, Строка, УникальныйИдентификатор.
302+
// Возвращаемое значение:
303+
// Строка. Строка данных в формате JSON согласно содержимому входящих данных.
338304
//
339-
Функция НастройкаНеявноеПриведениеПримитивныхЗначенийКлюча()
305+
Функция ЗаписатьJSON(Значение, Стандарт = Истина, ПредставленияСсылок = Ложь,
306+
МаскироватьСимволыПолностью=Истина, МаскироватьКириллицу=Ложь,
307+
НеявноПриводитьПримитивныеЗначенияКлюча=Ложь) Экспорт
340308

341-
Возврат Ложь; // Измените для использования неявного приведения примитивных значений ключей соответствий к строке.
309+
Возврат jsonЗаписатьИнициализация(Значение, Стандарт, ПредставленияСсылок, МаскироватьСимволыПолностью, МаскироватьКириллицу, Ложь);
342310

343-
КонецФункции // НастройкаНеявноеПриведениеПримитивныхЗначенийКлюча()
344-
311+
КонецФункции // ЗаписатьJSON()
345312

346313
// ─────────────────────────────────────────────────────────────────────────────
347314
// ПАРСЕР
@@ -822,7 +789,9 @@
822789
// ─────────────────────────────────────────────────────────────────────────────
823790
// СЕРИАЛИЗАТОР
824791

825-
Функция jsonЗаписатьИнициализация(Значение, Знач Стандарт, Знач ПредставленияСсылок)
792+
Функция jsonЗаписатьИнициализация(Значение, Знач Стандарт, Знач ПредставленияСсылок,
793+
Знач МаскироватьСимволыПолностью, Знач МаскироватьКириллицу,
794+
Знач НеявноПриводитьПримитивныеЗначенияКлюча)
826795

827796
// Проверка параметров.
828797
Если (Не Стандарт = Истина) И (Не Стандарт = Ложь) Тогда
@@ -863,7 +832,7 @@
863832
НовоеОписаниеТипов("Строка")); // ТипДопустимыхКлючей.
864833

865834
// Типы допустимых ключей.
866-
Если (НастройкаНеявноеПриведениеПримитивныхЗначенийКлюча() = Истина) Тогда
835+
Если НеявноПриводитьПримитивныеЗначенияКлюча = Истина Тогда
867836
ВспомогательныеДанные.ТипДопустимыхКлючей = Новый ОписаниеТипов("Null,Булево,Число,Дата,Строка,УникальныйИдентификатор");
868837
КонецЕсли;
869838

@@ -881,7 +850,7 @@
881850
КонецЕсли;
882851

883852
// Сериализация.
884-
Возврат jsonЗаписать(Значение, Стандарт, ПредставленияСсылок, ВспомогательныеДанные, Неопределено, Смещение, Отступ, Табуляция, ПереносСтроки, (НастройкаПолноеМаскированиеСимволов() = Истина), (НастройкаМаскированиеКириллицы() = Истина));
853+
Возврат jsonЗаписать(Значение, Стандарт, ПредставленияСсылок, ВспомогательныеДанные, Неопределено, Смещение, Отступ, Табуляция, ПереносСтроки, (МаскироватьСимволыПолностью = Истина), (МаскироватьКириллицу = Истина));
885854

886855
КонецФункции // jsonЗаписатьИнициализация()
887856

tests/json-test.os

Lines changed: 86 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,15 @@
2727
ВсеТесты.Добавить("ТестДолжен_ПроверитьПростойJSON");
2828
ВсеТесты.Добавить("ТестДолжен_ПроверитьФайлMockНаЧтение");
2929
ВсеТесты.Добавить("ТестДолжен_ПроверитьФайлMockНаЗапись");
30+
3031
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоОбъектПриводитсяКСтруктуре");
3132

33+
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСимволыМаскируютсяПолностью");
34+
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСимволыНеМаскируются");
35+
36+
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоКириллицаМаскируется");
37+
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоКириллицаНеМаскируется");
38+
3239
Возврат ВсеТесты;
3340
КонецФункции
3441

@@ -65,9 +72,7 @@
6572
ЧтениеТекста.Закрыть();
6673

6774
Объект = _преобразовательJSON.ПрочитатьJSON(СтрокаJSON);
68-
69-
Сообщить("Тип полученного объекта: " + ТипЗнч(Объект));
70-
75+
7176
юТест.ПроверитьРавенство(Тип("Соответствие"), ТипЗнч(Объект));
7277

7378
КонецПроцедуры
@@ -108,6 +113,84 @@
108113

109114
КонецПроцедуры
110115

116+
Процедура ТестДолжен_ПроверитьЧтоСимволыМаскируютсяПолностью() Экспорт
117+
118+
Эталон ="{
119+
| ""SymbolsToEscape"": ""\u007f\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f\u00ad"",
120+
| ""Cyrillic"": ""АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ""
121+
|}";
122+
123+
Объект = Новый Соответствие;
124+
Объект.Вставить("SymbolsToEscape", ПолучитьСтрокуСимволов(127, 159) + Символ(173));
125+
Объект.Вставить("Cyrillic", "АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ");
126+
127+
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект);
128+
129+
юТест.ПроверитьРавенство(Эталон, СтрокаJSON);
130+
131+
КонецПроцедуры
132+
133+
Процедура ТестДолжен_ПроверитьЧтоСимволыНеМаскируются() Экспорт
134+
135+
СтрокаОсобыхСимволов = ПолучитьСтрокуСимволов(127, 159) + Символ(173);
136+
137+
Эталон ="{
138+
| ""SymbolsToEscape"": """ + СтрокаОсобыхСимволов + """,
139+
| ""Cyrillic"": ""АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ""
140+
|}";
141+
142+
Объект = Новый Соответствие;
143+
Объект.Вставить("SymbolsToEscape", СтрокаОсобыхСимволов);
144+
Объект.Вставить("Cyrillic", "АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ");
145+
146+
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект,,,Ложь);
147+
148+
юТест.ПроверитьРавенство(Эталон, СтрокаJSON);
149+
150+
КонецПроцедуры
151+
152+
Процедура ТестДолжен_ПроверитьЧтоКириллицаМаскируется() Экспорт
153+
154+
Эталон ="{
155+
| ""SymbolsToEscape"": ""\u007f\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f\u00ad"",
156+
| ""Cyrillic"": ""\u0410\u0411\u0412\u0413\u0490\u0414\u0402\u0403\u0415\u0400\u0401\u0404\u0416\u0417\u0405\u0418\u040d\u0406\u0407\u0419\u0408\u041a\u041b\u0409\u041c\u041d\u040a\u041e\u041f\u0420\u0421\u0422\u040b\u040c\u0423\u040e\u0424\u0425\u0426\u0427\u040f\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f""
157+
|}";
158+
159+
Объект = Новый Соответствие;
160+
Объект.Вставить("SymbolsToEscape", ПолучитьСтрокуСимволов(127, 159) + Символ(173));
161+
Объект.Вставить("Cyrillic", "АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ");
162+
163+
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект,,,,Истина);
164+
165+
юТест.ПроверитьРавенство(Эталон, СтрокаJSON);
166+
167+
КонецПроцедуры
168+
169+
Процедура ТестДолжен_ПроверитьЧтоКириллицаНеМаскируется() Экспорт
170+
171+
Эталон ="{
172+
| ""SymbolsToEscape"": ""\u007f\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f\u00ad"",
173+
| ""Cyrillic"": ""АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ""
174+
|}";
175+
176+
Объект = Новый Соответствие;
177+
Объект.Вставить("SymbolsToEscape", ПолучитьСтрокуСимволов(127, 159) + Символ(173));
178+
Объект.Вставить("Cyrillic", "АБВГҐДЂЃЕЀЁЄЖЗЅИЍІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ");
179+
180+
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект);
181+
182+
юТест.ПроверитьРавенство(Эталон, СтрокаJSON);
183+
184+
КонецПроцедуры
185+
186+
Функция ПолучитьСтрокуСимволов(НачалоДиапазона, КонецДиапазона)
187+
СтрРезультат = "";
188+
Для КодСимвола = НачалоДиапазона По КонецДиапазона Цикл
189+
СтрРезультат = СтрРезультат + Символ(КодСимвола);
190+
КонецЦикла;
191+
Возврат СтрРезультат;
192+
КонецФункции
193+
111194
Функция ПривестиОкончанияСтрок(Знач ИсходныйТекст)
112195
Возврат СтрЗаменить(ИсходныйТекст, Символы.ВК + Символы.ПС, Символы.ПС);
113196
КонецФункции

0 commit comments

Comments
 (0)