Имя: Пароль:
1C
1C 7.7
v7: Запись/чтение JSON под 1С7.7
0 Garykom
 
гуру
28.04.15
14:40
Есть что "почти готовое" желательно без ВК и прочего.

Т.е. на коде 77.
1 Salimbek
 
28.04.15
14:51
(0) А как ты себе это представляешь? Т.к. JSON всего лишь разметка, а самое главное - это как твой "объект" преобразуется в понятный другой стороне набор полей.
2 Serginio1
 
28.04.15
15:03
ВК и прочее упрощают жизнь и позволяют использовать уже готовые решения.
3 Serginio1
 
28.04.15
15:06
Можно это реализовать и на нет, предварительно описав классы
http://msdn.microsoft.com/ru-ru/library/bb412179(v=vs.110).aspx

и
http://catalog.mista.ru/public/238584/    

Есть генераторы классов
http://jsonclassgenerator.codeplex.com/
http://stackoverflow.com/questions/6358745/generate-c-sharp-classes-from-json-schema
4 Кирпич
 
28.04.15
15:08
(0) вот здесь вроде есть. только на восьмерке
http://catalog.mista.ru/public/281276/
5 Garykom
 
гуру
28.04.15
15:11
(1) приблизительно так
Функция JSON(Объект, Детализация = 0) Экспорт
    Тип = ТипЗначенияСтр(Объект);
    
    Если Тип = "Справочник" Тогда
        Результат = СоздатьОбъект("Текст");
        Вид = Объект.Вид();
        
        Идентификатор = Метаданные.Справочник(Вид).Идентификатор;
        ПолныйИдентификатор = Метаданные.Справочник(Вид).ПолныйИдентификатор();
        
        Результат.ДобавитьСтроку("{");
        Результат.ДобавитьСтроку(""""+ПолныйИдентификатор+""""+": {");
        
        Код = Объект.Код;
        Результат.ДобавитьСтроку("""Код"": "+""""+Код+""",");
        Наименование = Объект.Наименование;
        Результат.ДобавитьСтроку("""Наименование"": "+""""+Наименование+"""");
        
        Если Детализация>=1 Тогда
            Результат.ДобавитьСтроку(",");
            
            КоличествоРеквизитов = Метаданные.Справочник(Вид).Реквизит();
            Для НомерРеквизита=1 По КоличествоРеквизитов Цикл
                Реквизит = Метаданные.Справочник(Вид).Реквизит(НомерРеквизита);
                РеквизитИдентификатор = Реквизит.Идентификатор;
                Результат.ДобавитьСтроку(""""+РеквизитИдентификатор+""""+": ");
                РеквизитЗначение = Объект.ПолучитьАтрибут(РеквизитИдентификатор);
                
                лТекстРеквизит = json(РеквизитЗначение, Детализация-1);
                
                КоличествоСтрокРеквизит = лТекстРеквизит.КоличествоСтрок();
                Для НомерСтрокиРеквизит=1 По КоличествоСтрокРеквизит Цикл
                    Результат.ДобавитьСтроку(лТекстРеквизит.ПолучитьСтроку(НомерСтрокиРеквизит));
                КонецЦикла;
                
                Если НомерРеквизита<КоличествоРеквизитов Тогда
                    Результат.ДобавитьСтроку(",");
                Иначе
                    
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        
        Результат.ДобавитьСтроку("}");
        Результат.ДобавитьСтроку("}");
        
        Возврат Результат;
    ИначеЕсли (Тип = "Документ") Тогда
        // еще не наваяно
    ИначеЕсли (Тип = "ТаблицаЗначений") ИЛИ (Тип = "СписокЗначений") Тогда
        // еще не наваяно
    ИначеЕсли Тип = "Строка" Тогда
        Результат = СоздатьОбъект("Текст");
        
        лРезультат = СокрЛП(Объект);
        лРезультат = СтрЗаменить(лРезультат, "\",          "\\");
        лРезультат = СтрЗаменить(лРезультат, "/",          "\/");
        лРезультат = СтрЗаменить(лРезультат, """",         "\""");
        лРезультат = СтрЗаменить(лРезультат, Симв(13),   "\r");
        лРезультат = СтрЗаменить(лРезультат, СимволТабуляции,  "\t");
        лРезультат = СтрЗаменить(лРезультат, Симв(10),   "\n");
        лРезультат = """" + лРезультат + """";
        Результат.ДобавитьСтроку(лРезультат);
        Возврат Результат;
        
    ИначеЕсли Тип = "Число" Тогда
        Результат = СоздатьОбъект("Текст");
        Результат.ДобавитьСтроку(Объект);
        Возврат Результат;
    ИначеЕсли Тип = "Дата" Тогда
        Результат = СоздатьОбъект("Текст");
        Результат.ДобавитьСтроку(json(Формат(Объект, "ДГГГГ-ММ-ДД")));
        Возврат Результат;
    Иначе
        Результат = СоздатьОбъект("Текст");
        Результат.ДобавитьСтроку(json(Строка(Объект)));
        Возврат Результат;
    КонецЕсли;
КонецФункции
6 Serginio1
 
28.04.15
15:11
7 Garykom
 
гуру
28.04.15
15:12
(2) (3) ВК и внешние не хочу

(4) дык на 77 нуна. сижу ваяю
8 Garykom
 
гуру
28.04.15
15:12
(6) 8-ка
9 Salimbek
 
28.04.15
15:27
(5) Периодические реквизиты еще есть, а еще бывают справочники без Кода и без Наименования.
10 Garykom
 
гуру
28.04.15
15:30
(9) у меня не бывают ))
11 Кирпич
 
28.04.15
15:34
(7) // дык на 77 нуна.
да не велика разница
12 Garykom
 
гуру
28.04.15
15:41
(11) если бы
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой