|
v7: Парсинг JSON | ☑ | ||
---|---|---|---|---|
0
Sam1C
09.06.17
✎
12:54
|
Доброго дня!
В 1С получаю данные в формате JSOM с помощью скрипта на JScript: ScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl"); ScrptCtrl.Language="jscript"; ScrptCtrl.AddCode(КодНаJScript); Объект = scriptCtrl.run("parseJSON",СтрокаОтвета); // - на этой строке валится 1С, если размер СтрокаОтвета большой. Ни кто не встречал такого? |
|||
1
Sam1C
09.06.17
✎
12:55
|
(0) Скрипт такой:
КодНаJScript = " | | function parseJSON(strJSON) { | var tmpFunc = (new Function('return('+strJSON+');'))(); | return(tmpFunc); | } | | // Получить элемент массива | function aGet(Array, index) { | return(Array[index]); | } | | // Получить ключ пары по индексу | function oKey(Obj, index) { | var size = 0, key; | for (key in Obj) { | if (size == index) break; | if (Obj.hasOwnProperty(key)) size++; | } | return(key); | } | | // Получить значение пары по ключу | function oValueByKey(Obj, key) { | return(Obj[key]); | } | | //Получить количество пар в объекте | Object.size = function(obj) { | var size = 0, key; | for (key in obj) { | if (obj.hasOwnProperty(key)) size++; | } | return(size); | } | | //Получить размер объекта (количество пар в нём) | function oSize(Obj) { | return(Object.size(Obj)); | } | | // Получить тип объекта (number, string, object, array) | function eType(Element) { | if (Element instanceof Array) { | return(""array""); | } else if (Object.prototype.toString.call(Element) === '[object Array]') { | return(""array""); | } else { | return(typeof(Element)); | } | } |"; |
|||
2
Sam1C
09.06.17
✎
12:56
|
(0) Извиняюсь, не JSOM, а JSON. Опечатка
|
|||
3
Вафель
09.06.17
✎
13:08
|
не понятен смысл этого кода
|
|||
4
ramir
09.06.17
✎
13:11
|
Не помню уже 1cv7, но там вроде нет ни соответствий, ни структур. Как без них можно JSON парсить - не ясно. В com объект загонять - не лучшая идея, поэтому, возможно, и падает.
|
|||
5
Sam1C
09.06.17
✎
13:16
|
(3) Какого не понятно? Этого Объект = scriptCtrl.run("parseJSON",СтрокаОтвета);? Выполняет функцию parseJSON на JScript с параметром strJSON = СтрокаОтвета.
Скрип JScript в (1) |
|||
6
mistеr
09.06.17
✎
13:39
|
(0) Попробуй через временный файл текст передавать.
|
|||
7
Torquader
12.06.17
✎
01:30
|
Правильно валится, так как в 1С 7.7 строка однобайтовая, а в OLE - двухбайтовая - и просто не хватает памяти для перевода строк.
Тут либо строку сразу получать внутри скрипта через ServerXMLHTTPRequest или передавать по частям. Опять же, парсер JsOn прекрасно пишется на самом 1С, в качестве хранилища структур можно использовать внешний OLE-объект Scripting.Dictionary |
|||
8
Антириус
12.06.17
✎
10:40
|
(0) Попробуйте так https://antirius.io/content/json1c
|
|||
9
Злопчинский
12.06.17
✎
12:17
|
Для хранения ключ-значение подходит СписокЗначений
Готовые парсеры для 77 есть на ИС |
|||
10
trdm
12.06.17
✎
14:21
|
можно написать приблуду, конвертирующую джейсона в хмл а потом сам хмл разбирать встроенными средствами.
уж хмл парсеры более оптимизированные по потреблению памяти. как вариант. |
|||
11
dmitryds
12.06.17
✎
15:17
|
(1) мне кажется проблема в том, что json-объект постоянно передается в этот объект-прослойку.
в (8) такого недостатка нет |
|||
12
dmitryds
16.06.17
✎
10:28
|
(0) проблема решена?
|
|||
13
Вафель
16.06.17
✎
10:44
|
Так в этом коде parseJSON - возвращает функцию, которая возвращает...
А вот непонятно, что возвращает та вложенная функция. Но никакого парса тут не видно. А все нижележащие функции вообще не вызываются |
|||
14
dmitryds
16.06.17
✎
11:34
|
(13) в этой функции при преобразовании строки в код JS автоматом получается объект json, который туда подставлен в виде строки
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |