Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: как правильно распарсить массив JSON

v7: как правильно распарсить массив JSON
Я
   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 / в отладчике
Как я понимаю, весь затык имеено в массиве, т.е. надо как-то хитрозадо передать, что надо отдать элемент массива ((.
Выручайте, кто уже столкнулся, голова уже взрывается.
   ksa-nsk
 
1 - 03.10.20 - 01:22
Инф.cars.length = 3
показ размера массива работает, а вот добраться... [] со скобками вроде как затык
   Cthulhu
 
3 - 03.10.20 - 02:11
   ksa-nsk
 
4 - 03.10.20 - 08:27
Cthulhu, оттуда и взял код. Парсер JSON работает, показывает значения ххх.ааа, проблема с передачей команды из 1С для обработки массива типа ххх.ааа[0]. Наверно, как-то по другому квадратные скобки надо передавать или может как-то в ScriptControl можно передать повторно для парсинга уже извлечённого массива ххх.ааа?
   ksa-nsk
 
5 - 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
   ksa-nsk
 
7 - 03.10.20 - 09:04
Злопчинский, можно поподробнее, ИС - это? и где взять "для 77 в\из JSON"
   ksa-nsk
 
8 - 03.10.20 - 09:33
всем спасибо, (3) - всё работает, ночь не спал, туплю жутко...
Мои извинения за лишнее беспокойство умных голов).
   zenon46
 
9 - 03.10.20 - 10:05
(8) а решение где?
   trdm
 
10 - 03.10.20 - 10:13
(9) +1
   Salimbek
 
11 - 03.10.20 - 10:15
(10) видимо, судя по (3): aGet(cars,0)
   Salimbek
 
12 - 03.10.20 - 10:17
+(11) точнее:

   Значение = scriptCtrl.run("aGet", cars, 0);
   ksa-nsk
 
13 - 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) ИС - это Инфостарт

Список тем форума
Рекламное место пустует  Рекламное место пустует
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.