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

06.08.17

Разработка - Универсальные функции

Первая функция получает Строку, которая содержит строчки вида «Ключ=Значение». Вторая функция получает Структуру.

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

Вступайте в нашу телеграмм-группу Инфостарт

JSON UNICODE REST API преобразование строк конвертация строк

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4090    Abysswalker    10    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    7645    DeerCven    15    

61

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    52581    dimanich70    84    

174

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7661    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    67067    atdonya    31    

72

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9578    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Altair777 649 11.07.17 10:08 Сейчас в теме
(0) а какой смысл в строках
Ответ=Ответ;
?
2. dimasts 22 11.07.17 11:38 Сейчас в теме
(1)Согласен – это артефакт от какой-то предидущей логики. Видимо оставил для понятности. Переписал.
3. nixel 1469 12.07.17 09:18 Сейчас в теме
А обратное преобразование есть под рукой?
4. dimasts 22 12.07.17 12:53 Сейчас в теме
(3) Под рукой нет. Но там не сложно должно быть. Так же создаёшь чтение и в цикле записываешь НачалоОбъекта ТипЗначения Значение НачалоМассива КонецМассива и КонецОбъекта.
5. nixel 1469 12.07.17 16:13 Сейчас в теме
(4) для обычного преобразования строки накидал такую процедурку:

Функция СтрокаВЮникод(Вход)
	ЗаписьJSON = Новый ЗаписьJSON;
	ИспользоватьДвойныеКавычки = Ложь;
	ЭкранироватьОдинарныеКавычки = Ложь;
	ЭкранироватьСлэш = Ложь;
	ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(
		,
		,
		ИспользоватьДвойныеКавычки,
		ЭкранированиеСимволовJSON.NotASCIISymbols,
		,
		,
		,
		ЭкранироватьОдинарныеКавычки,
		ЭкранироватьСлэш 
	);
	ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
	ЗаписьJSON.ЗаписатьЗначение(Вход);
	Выход = ЗаписьJSON.Закрыть();

        // Раскомментировать, если используется в OneScript - в 1.0.16 он добавляет одинарные кавычки вокруг строки.
	//Выход = Сред(Выход, 2, СтрДлина(Выход) - 2);
	Возврат Выход;
КонецФункции
Показать
malikov_pro; dimasts; +2 Ответить
6. DmitrySinichnikov 305 19.01.20 11:27 Сейчас в теме
Эммм... Сейчас может что-то глупое напишу, но, вы пробовали: СериализаторXDTO.ПрочитатьJSON / СериализаторXDTO.ЗаписатьJSON ?
Для отправки сообщения требуется регистрация/авторизация