Простой способ преобразовать 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 преобразование строк конвертация строк

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

18.03.2024    2915    2    John_d    11    

56

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.02.2024    5150    atdonya    22    

52

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    4129    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9497    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2275    26    progmaster    8    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16394    143    sapervodichka    112    

130

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7370    quazare    8    

110
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Altair777 644 11.07.17 10:08 Сейчас в теме
(0) а какой смысл в строках
Ответ=Ответ;
?
2. dimasts 22 11.07.17 11:38 Сейчас в теме
(1)Согласен – это артефакт от какой-то предидущей логики. Видимо оставил для понятности. Переписал.
3. nixel 1408 12.07.17 09:18 Сейчас в теме
А обратное преобразование есть под рукой?
4. dimasts 22 12.07.17 12:53 Сейчас в теме
(3) Под рукой нет. Но там не сложно должно быть. Так же создаёшь чтение и в цикле записываешь НачалоОбъекта ТипЗначения Значение НачалоМассива КонецМассива и КонецОбъекта.
5. nixel 1408 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 286 19.01.20 11:27 Сейчас в теме
Эммм... Сейчас может что-то глупое напишу, но, вы пробовали: СериализаторXDTO.ПрочитатьJSON / СериализаторXDTO.ЗаписатьJSON ?
Оставьте свое сообщение