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