Имя: Пароль:
1C
1С v8
Аналог функции json_decode в 1с для декодирования строки (escape)
0 adelaide
 
13.06.14
12:06
Работаю с Web API одного поставщика, результат возвращается в JSON, текст закодирован (escape) мне его надо раскодировать в 1С, в пхп это функция json_decode(), какой аналог есть в 1С?
1 shuhard
 
13.06.14
12:10
(0) нет
1С таких слов не знает
2 Рэйв
 
13.06.14
12:10
Есть такой аналог

ТвояФункцияПоДекодированиюJSON()

и ее тебе придется  написать самому.
3 adelaide
 
13.06.14
12:26
Может кому пригодится:

UnicodeEncode(Строка)


/////////////////////////РАБОТА С JSON //////////////////////////////////////////

//Функция декодирует полученный unicod текст
// в привычный нам
//Параметры:
// Строка
//Возвращаемое значение:
// Строка
Функция UnicodeEncode(Строка) Экспорт
    Результат = "";
    Попытка
        //регулярное выражение
        Рег = Новый COMОбъект("VBScript.RegExp");
        Рег.IgnoreCase = Истина;
        Рег.Global = Истина;
        Рег.Multiline = Ложь;
        Рег.Pattern = "u[0-9a-f]+";
        Колекция = Рег.Execute(Строка);
        Для Каждого Элемент Из Колекция Цикл
            Если СтрДЛина(Элемент.value) = 1 Тогда
                Продолжить;
            КонецЕсли;        
            
            КодСимвола = ПереводЧислаИз16в10(Сред(ВРег(Элемент.value), 2));
            Символ = Символ(КодСимвола);
            Строка = СтрЗаменить(Строка, "\" + Элемент.value, Символ);
        КонецЦикла;
        Результат = Строка;
    Исключение
        Результат = "";
        Сообщить("Ошибка преобразования из Unicode", СтатусСообщения.Информация);
    КонецПопытки;
    
    Возврат Результат;
КонецФункции

Функция ПереводЧислаИз16в10(Знач Значение)
    
    
    
    
    Результат = 0;
    
    //перевод значения в строку
    Если ТипЗнч(Значение) <> Тип("Строка") Тогда
        Значение = СокрЛП(Строка(Значение));
    КонецЕсли;
    
    МаксРазрядЦелых = 0;
    МаксРазрядЦелых = СтрДлина(Значение) - 1;
    
    н = МаксРазрядЦелых;
    Ин = 1;
    Пока н >= 0 Цикл
        ТекЗначение = СтруктураЧисел.Получить(Сред(Значение, Ин, 1)) * Pow(16, н);
        Результат = Результат + ТекЗначение;
        н = н - 1;
        Ин = Ин + 1;
    КонецЦикла;
    
    Возврат Результат;
КонецФункции

СтруктураЧисел = Новый Соответствие;
СтруктураЧисел.Вставить("0", 0);
СтруктураЧисел.Вставить("1", 1);
СтруктураЧисел.Вставить("2", 2);
СтруктураЧисел.Вставить("3", 3);
СтруктураЧисел.Вставить("4", 4);
СтруктураЧисел.Вставить("5", 5);
СтруктураЧисел.Вставить("6", 6);
СтруктураЧисел.Вставить("7", 7);
СтруктураЧисел.Вставить("8", 8);
СтруктураЧисел.Вставить("9", 9);
СтруктураЧисел.Вставить("A", 10);
СтруктураЧисел.Вставить("B", 11);
СтруктураЧисел.Вставить("C", 12);
СтруктураЧисел.Вставить("D", 13);
СтруктураЧисел.Вставить("E", 14);
СтруктураЧисел.Вставить("F", 15);
4 Asmody
 
13.06.14
13:37
2 + 2 = 3.9999999999999999999999999999999...