Skip to content

Commit 64b797b

Browse files
committed
Добавлена возможность изменения настройки НеявноПриводитьПримитивныеЗначенияКлюча
1 parent f5a7258 commit 64b797b

File tree

2 files changed

+66
-4
lines changed

2 files changed

+66
-4
lines changed

src/json.os

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@
306306
МаскироватьСимволыПолностью=Истина, МаскироватьКириллицу=Ложь,
307307
НеявноПриводитьПримитивныеЗначенияКлюча=Ложь) Экспорт
308308

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

311311
КонецФункции // ЗаписатьJSON()
312312

@@ -832,8 +832,8 @@
832832
НовоеОписаниеТипов("Строка")); // ТипДопустимыхКлючей.
833833

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

839839
// форматирование.
@@ -1737,4 +1737,4 @@
17371737
Длина = Найти(Описание, Символы.ПС); Если Длина Тогда Длина = Длина - Позиция; Иначе Длина = СтрДлина(Описание); КонецЕсли;
17381738
Возврат НСтр("ru = 'JSON: Невозможно выполнить запрос. '; uk = 'JSON: Неможливо виконати запит. '") + Сред(Описание, Позиция, Длина) + ".";
17391739

1740-
КонецФункции // ИсключениеНевозможноВыполнитьЗапрос()
1740+
КонецФункции // ИсключениеНевозможноВыполнитьЗапрос()

tests/json-test.os

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@
3636
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоКириллицаМаскируется");
3737
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоКириллицаНеМаскируется");
3838

39+
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоПримитивныеЗначенияКлючейПреобразуютсяКСтроке");
40+
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоПримитивныеЗначенияКлючейВызываютИсключение");
41+
3942
Возврат ВсеТесты;
4043
КонецФункции
4144

@@ -183,6 +186,65 @@
183186

184187
КонецПроцедуры
185188

189+
Процедура ТестДолжен_ПроверитьЧтоПримитивныеЗначенияКлючейПреобразуютсяКСтроке() Экспорт
190+
191+
УникальныйИдентификатор = Новый УникальныйИдентификатор;
192+
193+
Эталон = "{
194+
| """": ""Null"",
195+
| ""Да"": ""Истина"",
196+
| ""42"": ""Ответ на самый главный вопрос жизни, Вселенной и всего такого"",
197+
| ""31.12.2015 0:00:00"": ""С Новым Годом!"",
198+
| """ + Строка(УникальныйИдентификатор) + """: ""Это GUID""
199+
|}";
200+
201+
Объект = Новый Соответствие;
202+
Объект.Вставить(Null, "Null");
203+
Объект.Вставить(Истина, "Истина");
204+
Объект.Вставить(42, "Ответ на самый главный вопрос жизни, Вселенной и всего такого");
205+
Объект.Вставить(Дата(2015,12,31), "С Новым Годом!");
206+
Объект.Вставить(УникальныйИдентификатор, "Это GUID");
207+
208+
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект,,,,,Истина);
209+
210+
юТест.ПроверитьРавенство(Эталон, СтрокаJSON);
211+
212+
КонецПроцедуры
213+
214+
Процедура ТестДолжен_ПроверитьЧтоПримитивныеЗначенияКлючейВызываютИсключение() Экспорт
215+
216+
юТест.ПроверитьИстину(НедопустимыйТипЗначенияКлючаВызываетИсключение(Null),
217+
"Null-значение использовано в качестве ключа, а должно вызывать исключение");
218+
219+
юТест.ПроверитьИстину(НедопустимыйТипЗначенияКлючаВызываетИсключение(Истина),
220+
"Булево значение в использовано качестве ключа, а должно вызывать исключение");
221+
222+
юТест.ПроверитьИстину(НедопустимыйТипЗначенияКлючаВызываетИсключение(42),
223+
"Число использовано в качестве ключа, а должно вызывать исключение");
224+
225+
юТест.ПроверитьИстину(НедопустимыйТипЗначенияКлючаВызываетИсключение(Дата(2015,12,31)),
226+
"Дата использована в качестве ключа, а должна вызывать исключение");
227+
228+
юТест.ПроверитьИстину(НедопустимыйТипЗначенияКлючаВызываетИсключение(Новый УникальныйИдентификатор),
229+
"Уникальный идентификатор использован в качестве ключа, а должно вызывать исключение");
230+
231+
КонецПроцедуры
232+
233+
Функция НедопустимыйТипЗначенияКлючаВызываетИсключение(ЗначениеКлюча)
234+
Объект = Новый Соответствие;
235+
Объект.Вставить(ЗначениеКлюча, "Значение");
236+
Попытка
237+
СтрокаJSON = _преобразовательJSON.ЗаписатьJSON(Объект);
238+
Возврат Ложь;
239+
Исключение
240+
ОписаниеОшибки = ОписаниеОшибки();
241+
Если Найти(ОписаниеОшибки, "JSON: Недопустимый тип значения ключа") > 0 Тогда
242+
Возврат Истина;
243+
КонецЕсли;
244+
ВызватьИсключение ОписаниеОшибки;
245+
КонецПопытки
246+
КонецФункции
247+
186248
Функция ПолучитьСтрокуСимволов(НачалоДиапазона, КонецДиапазона)
187249
СтрРезультат = "";
188250
Для КодСимвола = НачалоДиапазона По КонецДиапазона Цикл

0 commit comments

Comments
 (0)