Имя: Пароль:
1C
1C 7.7
v7: Json в 1С 7.7
0 zenon46
 
09.09.25
18:56
Господа доброго времени суток!
Давно использую класс КОП_JSON от господина trad.
До этого делал простенькие файлы для обмена, тут понадобилось сделать файл чуть сложнее, что-то не получается. Может кто тоже юзает этот класс, посдкажет.
Структура, примерно такая.
{
  "set_code": "001",
  "items": [
    {
      "marketplace": "W",
      "article": 1223423,
      "article_post": "3243243",
      "barcode": 3242354435
    }
   {
      "marketplace": "O",
      "article": 234324324,
      "article_post": "КОД-Н2",
      "barcode": 3243234
    }  
  ]

"set_code": "002",
  "items": [
    {
      "marketplace": "W",
      "article": 1223423,
      "article_post": "3243243",
      "barcode": 3242354435
    }
   {
      "marketplace": "O",
      "article": 234324324,
      "article_post": "КОД-Н2",
      "barcode": 3243234
    }  
  ]

}
1 Джордж1
 
09.09.25
20:31
Если интересно - работаю c JSON без всяких классов
2 АгентБезопасной Нацио
 
09.09.25
20:36
(0) ошибка в примере.
3 trad
 
09.09.25
20:44
Для начала приведи корректный json, который хочешь получить, а не примерный
4 MWWRuza
 
гуру
09.09.25
20:54
Ну, я бы не сказал, что такая уж и ошибка...
Нотепад++ с плагином JSON форматирует его...
Лишние пустые строки? Или еще что-то?



Надо будет попробовать распарсить его своими обработками из конфы...

PS А вообще, да, внимательнее посмотрел, странный он какой-то...
Внутри квадратных скобок фигурные...
Или я опять не на то смотрю?
5 АгентБезопасной Нацио
 
09.09.25
20:57
(4) Это должен быть либо массив структур (с ключами set_code и items), либо ключи должны быть различными.
Вообще, нет никаких причин не сделать сборку строки хоть из спискаЗначений, Хоть из ТЗ, хоть из Структуры или ИТЗ (1с++). Рекурсией удобнее, без рекурсии лениво придумывать.
6 MWWRuza
 
гуру
09.09.25
21:15
Ага, не разбирает его мой парсер:

7 MWWRuza
 
гуру
09.09.25
21:39
Весь делать лень, вот кусочек через СЗ:




Процедура СобратьJSON()
    СЗ         = СоздатьОбъект("СписокЗначений");
    СзИт    = СоздатьОбъект("СписокЗначений");
    
    СзИт.ДобавитьЗначение("W");
    СзИт.ДобавитьЗначение(1223423);
    СзИт.ДобавитьЗначение("3243243");
    СзИт.ДобавитьЗначение(3242354435);    
    
    СЗ.ДобавитьЗначение("001", "set_code");
    СЗ.ДобавитьЗначение(СзИт, "items");
    
    JSON = ЗначениеВJSON(СЗ);
КонецПроцедуры
8 MWWRuza
 
гуру
09.09.25
21:54
Добавил немного:




Процедура СобратьJSON()
    СЗ             = СоздатьОбъект("СписокЗначений");
    СзИт        = СоздатьОбъект("СписокЗначений");
    СзИт2        = СоздатьОбъект("СписокЗначений");
    
    СзИтБезИД    = СоздатьОбъект("СписокЗначений");
    
    СзИт.ДобавитьЗначение("W", "marketplace");
    СзИт.ДобавитьЗначение(1223423,  "article");
    СзИт.ДобавитьЗначение("3243243", "article_post");
    СзИт.ДобавитьЗначение(3242354435, "barcode");

    СзИт2.ДобавитьЗначение("O", "marketplace");
    СзИт2.ДобавитьЗначение(234324324, "article");
    СзИт2.ДобавитьЗначение("КОД-Н2", "article_post");
    СзИт2.ДобавитьЗначение(3243234, "barcode");

    СзИтБезИД.ДобавитьЗначение(СзИт);
    СзИтБезИД.ДобавитьЗначение(СзИт2);    
    
    СЗ.ДобавитьЗначение("001", "set_code");
    СЗ.ДобавитьЗначение(СзИтБезИД, "items");
    
    JSON = ЗначениеВJSON(СЗ);
КонецПроцедуры
9 MWWRuza
 
гуру
09.09.25
22:13
Добавил еще пару строчек перед передачей списка в функцию:

    СЗ.ДобавитьЗначение("002", "set_code");
    СЗ.ДобавитьЗначение(СзИтБезИД, "items");

На выходе:


Как-то так...

В (0) нескольких запятых не хватает, а в целом, имеет право на жизнь, ИМХО...
10 Злопчинский
 
09.09.25
22:23
А где сам собственно
ЗначениеВJSON(СЗ)
11 MWWRuza
 
гуру
09.09.25
22:39
(10) А я ему давал текстовик с функциями ГМ :-)))
Тебе нужно? Могу и тебе отправить, просто там довольно громоздкие функции, на JS, и тут их выкладывать как-то не охота :-)
Они все есть на ИнфоСтарте, у меня они-же, с минимальными моими доработками.

Но, ему они скорее всего не подойдут, там требования сотни мегабайт... Нужно переделывать на поток или использовать еще что-то, так, как в том виде, в каком они у меня работают - 500+ кБ, потолок... Дальше, 1С крашится :-(
Мне - хватает с избытком... А парсинг больших JSON файлов, я делаю через 1csqllite от Djelf... Тоже кстати, очень не плохо работает, быстро, и без ограничений по объему, но на выходе не дерево из СЗ, а по сути плоская ТЗ, что не так удобно...
Но, я приспособился, первичный разбор большого JSON делаю 1csqllite, а вложенные списки уже этой своей привычной парсю. Так и не падает, и быстро и удобно.
12 Злопчинский
 
09.09.25
22:50
я отсюда взял (3 недели назад)
https://infostart.ru/1c/articles/960486/
13 Злопчинский
 
09.09.25
22:51
(11) скидавай
14 MWWRuza
 
гуру
10.09.25
08:07
(13) На почте из профиля
15 MWWRuza
 
гуру
10.09.25
11:56
(9) нескольких запятых не хватает, а в целом, имеет право на жизнь, ИМХО...

Кстати, посмотрел сейчас JSON который ТС мне на ВатСап присылал - там все запятые на месте. Это "кривой" тут, в оригинале все верно.
16 Злопчинский
 
10.09.25
14:14
(14) не, лучше в мессенджерах или на e.meil@mail.ru
17 MWWRuza
 
гуру
10.09.25
15:10
(16) Так я туда и отправил. Она у тебя в профиле и есть.
А месенджеров твоих у меня нет сейчас...
В старо-давние времена, были скайп и вроде аська(?), сейчас их прибили, есть ВатСап и телега, но там мы с тобой ни разу не состукивались, и у меня твоих контактов в них нет...
18 Злопчинский
 
11.09.25
02:24
(17) получил в телеге, спсб
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.