|
v7: Загрузка из файла JSON | ☑ | ||
---|---|---|---|---|
0
zenon46
14.05.24
✎
14:39
|
Доброго дня!
Может кто-то сталкивался с загрузками больших строк из файлов json, собственно файл 11 мегабайт. Пробовал использовать класс JSON = КОП_JSON.ert - работает НО ОЧЕНЬ долго, на маленьких объемах отлично, на нужном объеме, не дождаться, пробовал грузить файл 1.2 мегабайта, около 40 минут, дальше пробовал использовать MSScriptControl.ScriptControl - на нем просто платформа закрывается. Есть еще какие-то варианты ? |
|||
1
Djelf
14.05.24
✎
15:05
|
Используй последние версии 1sqlitе: https://cloud.mail.ru/public/9znr/ZJ6ULE9aR
Описание интерфейса: https://www.sqlite.org/json1.html Скорость термоядерная, но вложенных структур не получишь, только плоские таблицы. P.S. Напрямую из файла данные не кушает, но 11 метров для клюшек не проблема. P.P.S. Если вдруг будет вылетать по памяти, создавай базу sqlite не в :memory:, а в файле (тогда объем базы почти неограничен). P.P.P.S. Файл можно залить во временную табличку sqlite в этот временный файл, а в совсем новых версиях в бинарном/сокращенном формате, этот формат значительно ускоряет последующую обработку, и дергать его уже можно из базы, а не с сырых данных на диске по 10 раз. |
|||
2
Ivan_495
14.05.24
✎
14:54
|
(0) а у api нет функции загрузка по частям?
|
|||
3
zenon46
14.05.24
✎
14:56
|
(2) нет, ответ с сайта приходит целиком.
|
|||
4
MWWRuza
14.05.24
✎
15:10
|
Да, я тоже столкнулся с тем, что MSScriptControl.ScriptControl падает на сколько-то значимых по объему файлах...
ВК из (1) справляется отлично, но, конечно обработка плоских таблиц те еще танцы с бубном... В этом отношении MSScriptControl.ScriptControl намного проще и удобнее. Но, при желании все можно получить и из них - у меня получение остатков и оборотов из ЧЗ так сделано, работает. |
|||
5
zenon46
14.05.24
✎
15:49
|
(4) передал в MS - не строку, а ссылку на файл, что бы он сам его прочитал, не падает, жду результат...
PS отработал скрипт, не засекал, но примерно минут 20. |
|||
6
trad
14.05.24
✎
15:47
|
(0) у КОП_JSON есть свойство ИспользоватьScriptControl
Ставишь 1 и внутри будет работать MSScriptControl.ScriptControl А чтобы передача больших строк не валило ОЛЕ нужно применять OleExSup.dll |
|||
7
Djelf
14.05.24
✎
15:56
|
(4) Это не совсем так, все возможно.
Плоская таблица из sqlite и метод итз Группировать решают проблему. Теоретически, можно собрать внутренее представление таблицы, а потом при загрузке в ТЗ или ИТ преобразовать во вложенные таблицы. Подумаю об этом в следующей жизни... |
|||
8
ptiz
14.05.24
✎
15:54
|
(0) Написать сервис на 1С 8.3
|
|||
9
zenon46
14.05.24
✎
16:06
|
(8) тут нету ее, а покупать ради этой задачи, сомнительная затея.
|
|||
10
Djelf
14.05.24
✎
16:36
|
(9) Комьюнити версия? На ну нафиг... сервис на голанг в 100500 раз будет быстре...
|
|||
11
ptiz
14.05.24
✎
16:42
|
(9) Посмотреть в сторону onescript - преобразовывать в более легкий для 7.7 формат. Конечно, это как из пушки по воробьям, но тем не менее.
|
|||
12
zenon46
16.05.24
✎
16:57
|
Господа, как победить, при разборе входящего JSON файла, кодировка UTF8, получаю вот такое :
сз_URL_Файлов.ПолучитьЗначение(m) = "Сертификат" в файле вот это место : "title": "Сертификат" Как-то можно перекодировать в 1251 ? |
|||
13
Djelf
16.05.24
✎
17:05
|
(12) Любым, для твоего случая, доступным, их очень много есть.
Выбирай сам, самый доступный и удобный. |
|||
14
Kigo_Kigo
16.05.24
✎
17:07
|
(12) Функция ПреобразоватьСтрокуВУТФ8(Стр)
Длина=СтрДлина(Стр); Итог=""; Для Н=1 По Длина Цикл Знак=Сред(Стр,Н,1); Код=КодСимв(Знак); Если Код<128 Тогда Итог=Итог+Знак; Иначе Если (Код>=КодСимв("А"))И(Код<=КодСимв("п")) Тогда Итог=Итог+Симв(208)+Симв(144+Код-КодСимв("А")); ИначеЕсли (Код>=КодСимв("р"))И(Код<=КодСимв("я")) Тогда Итог=Итог+Симв(209)+Симв(128+Код-КодСимв("р")); ИначеЕсли (Знак="ё") Тогда Итог=Итог+Симв(209)+Симв(145); ИначеЕсли (Знак="Ё") Тогда Итог=Итог+Симв(208)+Симв(129); КонецЕсли; КонецЕсли; КонецЦикла; Возврат Итог; КонецФункции Функция ПреобразоватьСтрокуИзУТФ8(Стр) Длина=СтрДлина(Стр); Итог=""; Для Н=1 По Длина Цикл Знак=Сред(Стр,Н,1); Код=КодСимв(Знак); Если Код<128 Тогда Итог=Итог+Знак; ИначеЕсли (Код>=128)И(Код<192) Тогда Иначе Н=Н+1; Знак2=Сред(Стр,Н,1); Код2=КодСимв(Знак2); Если Код=208 Тогда Если Код2=129 Тогда Итог=Итог+"Ё"; Иначе Итог=Итог+Симв(КодСимв("А")+Код2-144); КонецЕсли; ИначеЕсли Код=209 Тогда Если Код2=145 Тогда Итог=Итог+"ё"; Иначе Итог=Итог+Симв(КодСимв("р")+Код2-128); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Возврат Итог; КонецФункции ПыСы не мое |
|||
15
Kigo_Kigo
16.05.24
✎
17:07
|
это у семерешников уже давно должно быть в глобальнике
|
|||
16
trad
16.05.24
✎
17:46
|
(12) попытаться запросить файл сразу в кодировке 1251
|
|||
17
Злопчинский
16.05.24
✎
19:23
|
Форекс уже умеет кодировать и декодировать в УТФ8
|
|||
18
Злопчинский
16.05.24
✎
19:26
|
||||
19
big
16.05.24
✎
20:00
|
А был бы XML, можно было бы ОЧЕНЬ быстро обработать ВСТРОЕННЫМИ средствами операционной системы. Джейсон - дрянь, кто бы что не говорил.
з.ы. Пардон, вырвалось )) |
|||
20
Djelf
16.05.24
✎
20:24
|
(14) 11 метров посимвольно, на языке 1С...
"Да я тебя!" (с)Операция "Ы" Знаем, помним. Есть такой доисторический метод. Храним в своих сердцах, рядом с сердцами Клааса, Данко и Соколом: Безумству храбрых поем мы славу! Безумство храбрых – вот мудрость жизни! О смелый Сокол! В бою с врагами истек ты кровью… Песня о Соколе (c)Максим Горький |
|||
21
Волшебник
16.05.24
✎
20:24
|
Некрофилы...
Пардон, вырвалось |
|||
22
Djelf
16.05.24
✎
20:35
|
(21) Уточняю - Это Некроманты...
Так будет полит-корректней, всякие "филы" не полит корректно, а вот "манты" вполне нейтрально... Вчера их кушал - вкусно! |
|||
23
Волшебник
16.05.24
✎
20:33
|
(22) Это у Вас вырвалось, а у меня другое вырвалось... Уж простите
|
|||
24
Djelf
16.05.24
✎
20:43
|
(23) А где я написал что что-то "вырвалось"?
Передергиваете карты, однако... |
|||
25
Волшебник
16.05.24
✎
20:48
|
(24) Понятно. Я Вас записал в чёрный блокнотик.
|
|||
26
Aleksey
16.05.24
✎
23:00
|
(4) вроде выкладывали относительно недавно тут версию через MSScriptControl.ScriptControl, которая не падает. по крайне мере у меня перестала падать, но я и 11 метров не гружу
там просто строка разбивалась и обрабатывалась кусками |
|||
27
Злопчинский
16.05.24
✎
23:35
|
(25) обложка в блокнотике - жёлтая?
|
|||
28
zenon46
17.05.24
✎
08:34
|
(26) не падает, я просто не строку передаю, а сам файл открыть.
| function parseJSON(path) { | var fso = new ActiveXObject('Scripting.FileSystemObject'); | var ts = fso.OpenTextFile(path, 1, true); | var str = ts.readAll(); | ts.close(); | var json = eval('(' + str + ')'); | return(json); |
|||
29
Kigo_Kigo
17.05.24
✎
08:50
|
(20) дык не весь файл, а тока получаемые значения на русском
|
|||
30
MWWRuza
17.05.24
✎
12:11
|
Что-то Djelf скромно молчит... У него в карлике есть отлично и быстро работающие функции перекодировки чего и во что угодно :-)
|
|||
31
Djelf
17.05.24
✎
14:57
|
(30) Я уже отписался в этой теме. Нет вопросов = нет ответов.
|
|||
32
victuan1
22.05.24
✎
07:52
|
(17) "Формекс уже умеет кодировать и декодировать в УТФ8"
А вот джейсон парсить туда и обратно не умеет) |
|||
33
trad
22.05.24
✎
08:58
|
{
"fld1": 1, "fld2": true, "fld3": "true", "fld4": null } Как вы считаете, во что должен быть преобразован такой json в семерке? |
|||
34
victuan1
22.05.24
✎
09:02
|
(33) В СписокЗначений, Структуру, ТаблицуЗначений, ИНдексированнуюТаблицу.
Нужно просто определить стандарт. |
|||
35
trad
22.05.24
✎
09:02
|
(34) я же значения конкретные привел не просто так
|
|||
36
victuan1
22.05.24
✎
11:05
|
Например:
true = 46465464567878; null = 164964364164691; Сп = СоздатьОбъект("СписокЗначений"); Сп.Установить("fd1", 1); Сп.Установить("fd2", true); Сп.Установить("fd3", "true"); Сп.Установить("fd4", null); |
|||
37
Djelf
22.05.24
✎
14:11
|
(33) Не проблема разобрать такое в sqlite.
А дальше... как хотите, так и вертите. SELECT * FROM json_tree( '{"fld1": 1,"fld2": true,"fld3": "true","fld4": null}')
|
|||
38
trad
22.05.24
✎
14:44
|
(37) интересный тип - true
|
|||
39
Djelf
22.05.24
✎
15:54
|
(38) Это не я придумал ;)
|
|||
40
mishaPH
22.05.24
✎
16:01
|
(0) через MS SQL как-то можно.
|
|||
41
Злопчинский
22.05.24
✎
19:10
|
(32) ещё покер не играет и куртизанок не обеспечивает...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |