|
v7: как правильно распарсить массив JSON | ☑ | ||
---|---|---|---|---|
0
ksa-nsk
03.10.20
✎
00:46
|
Приветствую все умные головы. Есть JSON-файл, единичные значения вытаскиваю, не могу допереть, как вытащить значения из массива.
Для теста создал строку. Процедура ХХХ() scriptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl"); scriptCtrl.Language="jscript"; scriptCtrl.AddCode(" | function parseJSON(strJSON) { | return(JSON.parse(strJSON)); |}"); стр = "{""name"":""John"",""age"":30,""cars"":[""Ford"",""BMW"",""Fiat""]}"; Инф = scriptCtrl.Eval("("+стр+")"); name = Инф.name; // работает car1 = Инф.cars[0]; // ошибка КонецПроцедуры Инф.cars = OLE.JScriptTypeInfo / в отладчике Как я понимаю, весь затык имеено в массиве, т.е. надо как-то хитрозадо передать, что надо отдать элемент массива ((. Выручайте, кто уже столкнулся, голова уже взрывается. |
|||
1
ksa-nsk
03.10.20
✎
01:22
|
Инф.cars.length = 3
показ размера массива работает, а вот добраться... [] со скобками вроде как затык |
|||
3
Cthulhu
03.10.20
✎
02:11
|
сюда загляни:
https://gist.github.com/r72cccp/9991957 |
|||
4
ksa-nsk
03.10.20
✎
08:27
|
Cthulhu, оттуда и взял код. Парсер JSON работает, показывает значения ххх.ааа, проблема с передачей команды из 1С для обработки массива типа ххх.ааа[0]. Наверно, как-то по другому квадратные скобки надо передавать или может как-то в ScriptControl можно передать повторно для парсинга уже извлечённого массива ххх.ааа?
|
|||
5
ksa-nsk
03.10.20
✎
08:54
|
еще раз посмотрел ту страницу, там после получения результата идет его обработка функцией
сп = jsonВСписок(Рез); в этой функции есть стока ТипОбъекта = scriptCtrl.run("eType", obj); и здесь семерка вываливается Выше тоже была команда с "run" Рез = scriptCtrl.run("parseJSON", стр ); , тоже вываливалась я ее заменил на Инф = scriptCtrl.Eval("("+стр+")"); как тогда правильно заменить "run" на "Eval" здесь? ТипОбъекта = scriptCtrl.run("eType", obj); |
|||
6
Злопчинский
03.10.20
✎
09:01
|
На ИС есть для 77 в\из JSON
|
|||
7
ksa-nsk
03.10.20
✎
09:04
|
Злопчинский, можно поподробнее, ИС - это? и где взять "для 77 в\из JSON"
|
|||
8
ksa-nsk
03.10.20
✎
09:33
|
всем спасибо, (3) - всё работает, ночь не спал, туплю жутко...
Мои извинения за лишнее беспокойство умных голов). |
|||
9
zenon46
03.10.20
✎
10:05
|
(8) а решение где?
|
|||
10
trdm
03.10.20
✎
10:13
|
(9) +1
|
|||
11
Salimbek
03.10.20
✎
10:15
|
(10) видимо, судя по (3): aGet(cars,0)
|
|||
12
Salimbek
03.10.20
✎
10:17
|
+(11) точнее:
Значение = scriptCtrl.run("aGet", cars, 0); |
|||
13
ksa-nsk
03.10.20
✎
13:27
|
(8) - все решение действительно, было на (3): https://gist.github.com/r72cccp/9991957, ступил, невнимательно посмотрел.
Единственно, что сделал - заменил в Процедура СкриптКонтролИнит(scriptCtrl) код | function parseJSON(strJSON) { | var tmpFunc = (new Function('return('+strJSON+');'))(); | return(tmpFunc); | } на (рекомендация внизу страницы): | function parseJSON(strJSON) { | return(JSON.parse(strJSON)); | } как пишет автор коммента, так значительно быстрее работает. (3) - после бессонной ночи ступил, потом по твоей ссылке ещё раз проработал и вот отпустило - всё чётко парсится, сижу, наслаждаюсь, как мозги в штатный режим переходят)) Да, на всякий случай добавлю, на будущее, для таких мамонтов, как я: конечная команда парсера сп = jsonВСписок(Рез); Далее - поместил строку JSON в первый попавшийся онлайн-конвертер https://jsonparseronline.com/ ну, а затем отладчик (мне так удобнее было), и после получения в нем результата того или значения пишу код в конфигураторе, типа ИНН = сп.Получить("items").ПолучитьЗначение(Н); // это цикл перебора массива "items" В общем, идет "сп.", потом перебор массивов (если есть до конечного значения) и в конце вытаскиваем нужное: - если массив, то "Получить("ХХХ")" - если конечное значение, то "ПолучитьЗначение("ххх")" Всё, тема закрыта полностью, всем спасибо за соучастие, редко захожу, но здесь реально получить помощь/совет)). |
|||
14
Злопчинский
03.10.20
✎
15:21
|
(7) ИС - это Инфостарт
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |