Функция JSON(Значение) Экспорт
Разделитель="";
ТипЗн=ТипЗнч(Значение);
Если ТипЗн=Тип("Строка") Тогда
Стр=""""+Маскировать(Значение)+""""
ИначеЕсли ТипЗн=Тип("Число") ИЛИ ТипЗнч(Значение)=Тип("Булево") Тогда
Стр=XMLСтрока(Значение)
ИначеЕсли ТипЗн=Тип("Дата") Тогда
Стр=""""+?(ЗначениеЗаполнено(Значение),XMLСтрока(Значение),"")+""""
ИначеЕсли ТипЗн=Тип("Структура") Тогда
Стр="{";
Для Каждого Параметр Из Значение Цикл
Стр=Стр+Разделитель+Символы.ПС+""""+Параметр.Ключ+""":"+JSON(Параметр.Значение);
Разделитель=","
КонецЦикла;
Стр=Стр+Символы.ПС+"}";
ИначеЕсли ТипЗн=Тип("Массив") Тогда
Стр="[";
Для Каждого Элемент Из Значение Цикл
Стр=Стр+Разделитель+Символы.ПС+JSON(Элемент);
Разделитель=","
КонецЦикла;
Стр=Стр+Символы.ПС+"]";
ИначеЕсли ТипЗн=Тип("ТаблицаЗначений") Тогда
Колонки=Значение.Колонки;
Массив=Новый Массив;
Для Каждого СтрокаТЗ Из Значение Цикл
Структура=Новый Структура;
Для Каждого Колонка Из Колонки Цикл
Структура.Вставить(Колонка.Имя,СтрокаТЗ[Колонка.Имя])
КонецЦикла;
Массив.Добавить(Структура);
КонецЦикла;
Стр=JSON(Массив)
ИначеЕсли Значение=Неопределено Тогда
Стр="null"
Иначе
Стр=""""+Маскировать(Значение)+""""
КонецЕсли;
Возврат Стр
КонецФункции
Функция ФорматированныйJSON(Значение,Отступ="") Экспорт
Разделитель="";
ТипЗн=ТипЗнч(Значение);
Если ТипЗн=Тип("Строка") Тогда
Стр=""""+Маскировать(Значение)+""""
ИначеЕсли ТипЗн=Тип("Число") ИЛИ ТипЗнч(Значение)=Тип("Булево") Тогда
Стр=XMLСтрока(Значение)
ИначеЕсли ТипЗн=Тип("Дата") Тогда
Стр=""""+?(ЗначениеЗаполнено(Значение),XMLСтрока(Значение),"")+""""
ИначеЕсли ТипЗн=Тип("Структура") Тогда
Стр="{";
Для Каждого Параметр Из Значение Цикл
Стр=Стр+Разделитель+Символы.ПС+Отступ+""""+Параметр.Ключ+""":"+ФорматированныйJSON(Параметр.Значение,Отступ+Символы.Таб);
Разделитель=","
КонецЦикла;
Стр=Стр+Символы.ПС+Отступ+"}";
ИначеЕсли ТипЗн=Тип("Массив") Тогда
Стр="[";
Для Каждого Элемент Из Значение Цикл
Стр=Стр+Разделитель+Символы.ПС+Отступ+ФорматированныйJSON(Элемент,Отступ);
Разделитель=","
КонецЦикла;
Стр=Стр+Символы.ПС+Отступ+"]";
ИначеЕсли ТипЗн=Тип("ТаблицаЗначений") Тогда
Колонки=Значение.Колонки;
Массив=Новый Массив;
Для Каждого СтрокаТЗ Из Значение Цикл
Структура=Новый Структура;
Для Каждого Колонка Из Колонки Цикл
Структура.Вставить(Колонка.Имя,СтрокаТЗ[Колонка.Имя])
КонецЦикла;
Массив.Добавить(Структура);
КонецЦикла;
Стр=ФорматированныйJSON(Массив)
ИначеЕсли Значение=Неопределено Тогда
Стр="null"
Иначе
Стр=""""+Маскировать(Значение)+""""
КонецЕсли;
Возврат Стр
КонецФункции
Функция Маскировать(Знач Стр)
Стр=СтрЗаменить(Стр,Символы.ПС,"\n");
Стр=СтрЗаменить(Стр,Символы.ВК,"\r");
Стр=СтрЗаменить(Стр,"""","\""");
Стр=СтрЗаменить(Стр,"'","\'");
Возврат Стр
КонецФункции
Примеры вызовов функции JSON:
Структура=Новый Структура("sIP,sDefaultGateway,nNode,nRing");
ЗаполнитьЗначенияСвойств(Структура,Источник);
Структура.Вставить("Error",Новый Структура("Code,Description",0,"OK"));
Возврат JSON(Структура)
или так
Запрос=Новый Запрос("ВЫБРАТЬ * ИЗ Справочник.Абоненты");
Возврат JSON(Запрос.Выполнить().Выгрузить());
Просьба не пинать, так как это моя первая публикация.