Простой способ преобразовать UNICODE в строку или в структуру.

1. dimasts 22 07.07.17 13:54 Сейчас в теме
При интеграции со сторонними сервисами часто требуется перевести крокозямблы, которые приходят в ответ от 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.ТекущееЗначение); 
		КонецЕсли; 
	КонецЦикла;
	ОтветСтруктура=Новый Структура;
	Для Счетчик = 1 По СтрЧислоСтрок(Ответ) Цикл
		ТекСтрока = СтрПолучитьСтроку(Ответ, Счетчик);
		Если СокрЛП(ТекСтрока)<>"" Тогда
			Ключ=Лев(ТекСтрока,СтрНайти(ТекСтрока,"=")-1);
			Значение=СтрЗаменить(ТекСтрока,Ключ+"=","");
			Если Ключ<>Значение Тогда
				ОтветСтруктура.Вставить(Ключ,Значение);
			Иначе
				ОтветСтруктура.Вставить(Ключ,"");
			КонецЕсли; 
		КонецЕсли; 
	КонецЦикла;
	Возврат ОтветСтруктура;
КонецФункции

Показать
+
По теме из базы знаний
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот