Skip to content

Commit 0a5f578

Browse files
committed
Добавлена возможность настройки автоматического приведения объектов JSON к структуре
1 parent 7a731f3 commit 0a5f578

File tree

2 files changed

+35
-22
lines changed

2 files changed

+35
-22
lines changed

src/json.os

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -250,13 +250,21 @@
250250
// - Истина - ссылки передаются вместе со своим представлением, как объекты с двумя свойствами содержащими саму ссылку и ее представление;
251251
// - Ложь - ссылки передаются без представления (значение по умолчанию).
252252
// - Неопределено - автоопределение режима.
253-
//
253+
//
254+
// АвтоматическиПриводитьОбъектыКСтруктуре - Булево. Определяет, нужно ли автоматически приводить объект к Структуре или к Соответствию.
255+
// - Истина - выполняется автоматическое приведение объекта к структуре;
256+
// - Ложь - автоматическое приведение объекта к структуре не выполняется, все объекты преобразуются в соответствие (значение по умолчанию).
257+
//
258+
// Примечание:
259+
// Автоматическое приведение к структуре выполняется только для объектов имена свойств которых могут быть
260+
// использованы как ключи структуры, все остальные объекты преобразуются в соответствие.//
261+
//
254262
// Возвращаемое значение:
255263
// Набор данных согласно содержимому входящих данных.
256264
//
257-
Функция ПрочитатьJSON(Значение, Стандарт = Истина, ПредставленияСсылок = Ложь) Экспорт
265+
Функция ПрочитатьJSON(Значение, Стандарт = Истина, ПредставленияСсылок = Ложь, АвтоматическиПриводитьОбъектыКСтруктуре = Ложь) Экспорт
258266

259-
Возврат jsonПрочитатьИнициализация(Значение, Стандарт, ПредставленияСсылок);
267+
Возврат jsonПрочитатьИнициализация(Значение, Стандарт, ПредставленияСсылок, АвтоматическиПриводитьОбъектыКСтруктуре);
260268

261269
КонецФункции // ПрочитатьJSON()
262270

@@ -286,23 +294,6 @@
286294
// ─────────────────────────────────────────────────────────────────────────────
287295
// НАСТРОЙКИ
288296

289-
// Функция управляющая настройкой "АвтоматическоеПриведениеОбъектаКСтруктуре".
290-
//
291-
// Возвращаемое значение:
292-
// Булево. Значение настройки:
293-
// - Истина - выполняется автоматическое приведение объекта к структуре;
294-
// - Ложь - автоматическое приведение объекта к структуре не выполняется, все объекты преобразуются в соответствие.
295-
//
296-
// Примечание:
297-
// Автоматическое приведение к структуре выполняется только для объектов имена свойств которых могут быть
298-
// использованы как ключи структуры, все остальные объекты преобразуются в соответствие.
299-
//
300-
Функция НастройкаАвтоматическоеПриведениеОбъектаКСтруктуре()
301-
302-
Возврат Ложь; // Измените для использования автоматического приведения объекта к структуре.
303-
304-
КонецФункции // НастройкаАвтоматическоеПриведениеОбъектаКСтруктуре()
305-
306297
// Функция управляющая настройкой "ПолноеМаскированиеСимволов".
307298
//
308299
// Возвращаемое значение:
@@ -359,7 +350,7 @@
359350
Возврат Строка; //TODO вставлена для прохождения компиляции
360351
КонецФункции
361352

362-
Функция jsonПрочитатьИнициализация(Значение, Знач Стандарт, Знач ПредставленияСсылок)
353+
Функция jsonПрочитатьИнициализация(Значение, Знач Стандарт, Знач ПредставленияСсылок, Знач АвтоматическиПриводитьКСтруктуре)
363354

364355
// Проверка параметров.
365356
Если (Не Стандарт = Истина) И (Не Стандарт = Ложь) И (Не Стандарт = Неопределено) Тогда
@@ -388,7 +379,7 @@
388379
ВспомогательныеДанные = Новый Структура("ТипСтроки,СхемаПодстановок,АвтоматическиПриводитьКСтруктуре",
389380
Тип("Строка"),
390381
СхемаПодстановок,
391-
(НастройкаАвтоматическоеПриведениеОбъектаКСтруктуре() = Истина));
382+
(АвтоматическиПриводитьКСтруктуре = Истина));
392383

393384
// Стартовые значения.
394385
Индекс = 1; Длина = СтрДлина(Значение);

tests/json-test.os

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

3132
Возврат ВсеТесты;
3233
КонецФункции
@@ -86,6 +87,27 @@
8687

8788
КонецПроцедуры
8889

90+
Процедура ТестДолжен_ПроверитьЧтоОбъектПриводитсяКСтруктуре() Экспорт
91+
92+
тестовыйJSON = "{
93+
| ""firstName"": ""Иван"",
94+
| ""lastName"": ""Иванов"",
95+
| ""address"": {
96+
| ""streetAddress"": ""Московское ш., 101, кв.101"",
97+
| ""city"": ""Ленинград"",
98+
| ""postalCode"": 101101
99+
| },
100+
| ""phoneNumbers"": [
101+
| ""812 123-1234"",
102+
| ""916 123-4567""
103+
| ]
104+
|}";
105+
106+
Объект = _преобразовательJSON.ПрочитатьJSON(тестовыйJSON,,,Истина);
107+
юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(Объект));
108+
109+
КонецПроцедуры
110+
89111
Функция ПривестиОкончанияСтрок(Знач ИсходныйТекст)
90112
Возврат СтрЗаменить(ИсходныйТекст, Символы.ВК + Символы.ПС, Символы.ПС);
91113
КонецФункции

0 commit comments

Comments
 (0)