При интеграции со сторонними сервисами часто требуется перевести крокозямблы, которые приходят в ответ от REST API методов, в человеческие буквы :)
Мне эта короткая функция сильно упрощает жизнь.
Учитывайте, что функция игнорирует Значения с типами «НачалоОбъекта» и «КонецОбъекта», хотя мне не разу это не пригодилось.
Функция ЮникодВСтроку(ИсходнаяСтрока) Экспорт
Ответ="";
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ИсходнаяСтрока);
Пока ЧтениеJSON.Прочитать() Цикл
Если НЕ(ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.НачалоОбъекта
ИЛИ ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.КонецОбъекта
ИЛИ ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.НачалоМассива
ИЛИ ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.КонецМассива) Тогда
Ответ=Ответ+?(НЕ Строка(ЧтениеJSON.ТекущееЗначение)=""
И ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.ИмяСвойства
,Строка(ЧтениеJSON.ТекущееЗначение)+"="
,Строка(ЧтениеJSON.ТекущееЗначение)+Символы.ВК);
ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.НачалоМассива Тогда
Ответ=Ответ+Символы.ВК+"["+Символы.ВК;
ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.КонецМассива Тогда
Ответ=Ответ+"]"+Символы.ВК;
ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.НачалоОбъекта Тогда
Ответ=Ответ+Символы.ВК+"{"+Символы.ВК;
ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.КонецОбъекта Тогда
Ответ=Ответ+"}"+Символы.ВК;
Иначе
Ответ=Ответ+Символы.ВК;
КонецЕсли;
КонецЦикла;
Возврат Ответ;
КонецФункции
Если требуется ответ в виде структуры, тогда:
Функция ЮникодВСтруктуру(ИсходнаяСтрока)Экспорт
Ответ="";
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ИсходнаяСтрока);
Пока ЧтениеJSON.Прочитать() Цикл
Если НЕ(ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.НачалоОбъекта
ИЛИ ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.КонецОбъекта
ИЛИ ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.НачалоМассива
ИЛИ ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.КонецМассива) Тогда
Ответ=Ответ+?(НЕ Строка(ЧтениеJSON.ТекущееЗначение)=""
И ЧтениеJSON.ТипТекущегоЗначения=ТипЗначенияJSON.ИмяСвойства,Символы.ВК+ЧтениеJSON.ТекущееЗначение+"="
,ЧтениеJSON.ТекущееЗначение);
КонецЕсли;
КонецЦикла;
ОтветСтруктура=Новый Структура;
Для Счетчик = 1 По СтрЧислоСтрок(Ответ) Цикл
ТекСтрока = СтрПолучитьСтроку(Ответ, Счетчик);
Если СокрЛП(ТекСтрока)<>"" Тогда
Ключ=Лев(ТекСтрока,СтрНайти(ТекСтрока,"=")-1);
Значение=СтрЗаменить(ТекСтрока,Ключ+"=","");
Если Ключ<>Значение Тогда
ОтветСтруктура.Вставить(Ключ,Значение);
Иначе
ОтветСтруктура.Вставить(Ключ,"");
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ОтветСтруктура;
КонецФункции