Функция для преобразования структуры данных 1С в JSON

Взято тут: http://pastebin.com/HFaEaETX

Спасибо Хабраюзеру http://habrahabr.ru/users/igrishaev/

    Функция json(Объект)
 
            Тип = ТипЗнч(Объект);
 
            Если
                            Тип = Тип("Массив")
                    ИЛИ Тип = Тип("ТаблицаЗначений")
                    ИЛИ Тип = Тип("СписокЗначений")
 
                    Тогда
 
                    Количество = Объект.Количество();
                    Результат = "[";
 
                    Для н = 0 ПО Количество - 1 Цикл
                            Результат = Результат + json(Объект[н]) + ?(н < Количество - 1, ", ", "");
                    КонецЦикла;
 
                    Результат = Результат + "]";
                    Возврат Результат;
 
            ИначеЕсли
                            Тип = Тип("Структура")
                    ИЛИ Тип = Тип("Соответствие") Тогда
                    н = 0;
                    Количество = Объект.Количество();
                    Результат = "{";
 
                    Для Каждого Пара Из Объект Цикл
                            Результат = Результат + json(Пара.Ключ) + ": " + json(Пара.Значение) + ?(н < Количество - 1, ", ", "");
                            н = н + 1;
                    КонецЦикла;
                    Результат = Результат + "}";
                    Возврат Результат;
 
            ИначеЕсли Тип = Тип("СтрокаТаблицыЗначений") Тогда
 
                    Результат = "{";
                    Колонки = Объект.Владелец().Колонки;
                    Количество = Колонки.Количество();
 
                    Для н = 0 ПО Количество - 1 Цикл
                            Ключ = Колонки[н].Имя;
                            Результат = Результат + json(Ключ) + ": " + json(Объект[Ключ]) + ?(н < Количество - 1, ", ", "");
                    КонецЦикла;
 
                    Результат = Результат + "}";
                    Возврат Результат;
 
            ИначеЕсли Тип = Тип("ЭлементСпискаЗначений") Тогда
                    Возврат json(Объект.Значение);
 
            ИначеЕсли Тип = Тип("Строка") Тогда
                    Результат = Объект;
 
                    Результат = СтрЗаменить(Результат, "\",          "\\");
                    Результат = СтрЗаменить(Результат, "/",          "\/");
                    Результат = СтрЗаменить(Результат, """",         "\""");
                    Результат = СтрЗаменить(Результат, Символы.ВК,   "\r");
                    Результат = СтрЗаменить(Результат, Символы.Таб,  "\t");
                    Результат = СтрЗаменить(Результат, Символы.ПС,   "\n");
 
                    Возврат """" + Результат + """";
 
            ИначеЕсли Тип = Тип("Число") Тогда
                    Возврат Формат(Объект, "ЧРД=.; ЧН=0; ЧГ=0");
 
            ИначеЕсли Тип = Тип("Булево") Тогда
                    Возврат Формат(Объект, "БЛ=false; БИ=true");
 
            ИначеЕсли Тип = Тип("Дата") Тогда
                    Возврат json(Формат(Объект, "ДФ=yyyy-MM-ddThh:mm:ss"));
 
            ИначеЕсли
                            Объект = Неопределено
                    ИЛИ Объект = Null
 
                    Тогда Возврат "null";
 
            ИначеЕсли
                            Справочники.ТипВсеСсылки().СодержитТип(Тип)
                    Или Документы.ТипВсеСсылки().СодержитТип(Тип)
 
                    Тогда
                            Возврат json(Объект.УникальныйИдентификатор());
 
            Иначе
                    Возврат json(Строка(Объект));
 
            КонецЕсли;
    КонецФункции
  • software/1c/1c-json.txt
  • Последнее изменение: 2017/05/09 18:34
  • 127.0.0.1