Имя: Пароль:
1C
1С v8
Выгрузка из 1с в JSON
,
0 ALEX7519
 
29.09.22
19:56
Такой вопрос : поставили задачу выгрузить некие данные в JSON , структуру файла дали .
Могу я просто создать текстовый файл, подобавлять в него строки типа
"col01": 23.45,
"col02": 34.5,

в начале и конеце поставить [] } ...

и сохранить все это с расширением JSON ?

это и будет в принципе файл JSON ?
или надо заморачиваться со специальными командами и т.п ?
( структура файла известна, кол-во полей (строк) в нем ограничено )
1 Kassern
 
29.09.22
19:59
(0) Лучше создать нужную структуру и воткнуть ее в ЗаписатьJSON. Не будет проблем с косячными скобками и прочим
2 НафНаф
 
29.09.22
20:02
(0) почему не хочешь нормально JSON строку создать?
3 ALEX7519
 
29.09.22
20:05
(1) т е например можно сделать таблицу значений у которой названия колонок будут ключи "col01" например, а в первой строчке значения и ЗаписатьJSON выдаст что то типа этого ?
[
{
"col01": 23.45,
"col02": 34.5
}
]
4 ALEX7519
 
29.09.22
20:05
(2) потому что пока хз что это такое )
5 ALEX7519
 
29.09.22
20:08
и еще вопрос - чтовы вот такое получилось уже таблица значений не подойдет ? а тут какую структуру делать ?

"row01": {
"col01": 23.45,
"col02": 34.5,
"col03": 34,
"col04": 45
},
"row02": {
"col01": 45,
"col03": 34
},
"row03": {
"col02": 23,
"col04": 45
},
6 withoutname
 
29.09.22
20:13
(4) в Синтакс-Помощнике(СП) забей JSON )
7 Garykom
 
гуру
29.09.22
20:14
(0) Можно но не нужно, если у тебя не 1С 7.7
В 1С 8 есть прекрасные средства работы с JSON

Тупо структуру заполни и сохрани
https://wonderland.v8.1c.ru/blog/sredstva-raboty-s-json/
8 Garykom
 
гуру
29.09.22
20:17
(3) Это массив из структур
(5) Это структуры в структуре

Если имена полей не подходят под Структура то Соответствие
9 Kassern
 
29.09.22
20:57
(5) {} - объект (в 1с структура)
    [] - массив объектов.
Вот и все что нужно знать по JSON)
10 rudnitskij
 
29.09.22
22:46
(0)     МассивСтруктур = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТвояТаблицаЗначений);
    ЗаписьДЖСОН = Новый ЗаписьJSON;
    ЗаписьДЖСОН.УстановитьСтроку();
    ЗначениеНаЗапись = Неопределено;
    Попытка
        ЗаписьДЖСОН.ЗаписатьНачалоМассива();
        Для Каждого Структ Из МассивСтруктур Цикл
            ЗаписьДЖСОН.ЗаписатьНачалоОбъекта();
            Для Каждого Элемент Из Структ Цикл
                ЗаписьДЖСОН.ЗаписатьИмяСвойства(Элемент.Ключ);
                ЗначениеНаЗапись = Элемент.Значение;
                Если ТипЗнч(Элемент.Значение) = Тип("Дата") Тогда
                    ЗначениеНаЗапись = Формат(Элемент.Значение, "ДФ=yyyy-MM-dd");
                ИначеЕсли Не (ТипЗнч(Элемент.Значение) = Тип("Строка")
                    Или ТипЗнч(Элемент.Значение) = Тип("Число")
                    Или ТипЗнч(Элемент.Значение) = Тип("Булево"))
                    Тогда
                    ЗначениеНаЗапись = СокрЛП(Строка(Элемент.Значение));
                КонецЕсли;    
                ЗаписьДЖСОН.ЗаписатьЗначение(ЗначениеНаЗапись);
            КонецЦикла;    
            ЗаписьДЖСОН.ЗаписатьКонецОбъекта();
        КонецЦикла;
        ЗаписьДЖСОН.ЗаписатьКонецМассива();
    Исключение
        // обработка исключения
    КонецПопытки;
    Возврат ЗаписьДЖСОН.Закрыть();
-----------------------------------------------
Тебе повезло, как раз сегодня была у меня задача по формированию json из таблицы значений) вот готовый код, который практически из любой ТЗ формирует строку json
11 Garykom
 
гуру
29.09.22
23:10
(10) может уже подучить сериализацию json в 1С?
ибо нахрена вручную то писать
но уже хорошо что не через строки ))
12 OldCondom
 
30.09.22
03:46
Я пару дней назад купил книжку 1с, кажется "Технологии интеграции" Хрусталевой. Понял, насколько был туп и убог в json, веб сервисах, обменахи т.д.
Там для json пару глав по паре страниц отведено, полистай и в голове все сложится. И такого ужаса как в (10) не будет.

Книжка на итс кстати есть.
13 AneJIbcuH
 
30.09.22
08:08
(10) чувак, всё проще делается...
14 AneJIbcuH
 
30.09.22
08:09
(13) + 8.3.23 ещё проще будет
https://wonderland.v8.1c.ru/blog/uluchshenie-raboty-s-json/
15 НафНаф
 
30.09.22
08:18
(9) структура или соответствие
16 rudnitskij
 
30.09.22
09:18
(11) Результат "сериализации" получателю не подходит. А при попытке записать дату в лоб сама 1С просто выкидывает с ошибкой.
А так мы все всё выучили, да...
17 rudnitskij
 
30.09.22
09:21
(11) (12) (13) (14)  Ребят, вы думаете, у меня нет гугла и я не могу это всё найти без вашей помощи?) Кстати, подкиньте мне ссылочку, где описано, какой параметр указать для сериализатора, чтоб из представлений ссылочных объектов убирал лишние пробелы - раз у вас гугл лучше работает, чем у меня
18 Kassern
 
30.09.22
11:13
(17) Вы про XmlСтрока()?
19 Garykom
 
гуру
30.09.22
12:10
(17) да думаю нет
потому что XMLСтрока() и

(16) дату сам в строку преобразуй как надо или ФорматДатыJSON
20 ДедМорроз
 
02.10.22
12:34
Начнем с того,что в json дат нету.
То есть,для самого формата это строка и тут надо смотреть,как ее на той стороне читают,чтобы не было ошибок.
21 Sj
 
03.10.22
01:53
(5)
М = новый массив;
М.Добавить( новый структура ("row1", новый структура("col1, col2",1,2)
22 Skylark
 
03.10.22
10:03
(20) ЗаписатьJSON(<ЗаписьJSON>, <Значение>, <НастройкиСериализации>, <ИмяФункцииПреобразования>, <МодульФункцииПреобразования>, <ДополнительныеПараметрыФункцииПреобразования>)

Курим последние три параметра и ищем пример в типовых конфах.

Вот в ЗУП например

    НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON;
    НастройкиСериализацииJSON.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.ЛокальнаяДата;
    НастройкиСериализацииJSON.ФорматСериализацииДаты = ФорматДатыJSON.ISO;
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON( ,Символы.Таб));
    ЗаписатьJSON(ЗаписьJSON, Значение, НастройкиСериализацииJSON, "ПреобразованиеJSON", ОбщегоНазначения.ОбщийМодуль("КабинетСотрудника"));
    Результат = ЗаписьJSON.Закрыть();
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан