-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathГлобальный модуль
113 lines (109 loc) · 4.62 KB
/
Глобальный модуль
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Функция глРазборJSON(Знач Стр) Экспорт Далее
//*********************************************************************************
Процедура СкриптКонтролИнит(scriptCtrl)
scriptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
scriptCtrl.Language="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));
| }
| }
|";
scriptCtrl.AddCode(код);
//Для редактирования использовался Sublime3
КонецПроцедуры
//*******************************************
Функция jsonВСписок(obj)
Если ПустоеЗначение(scriptCtrl)=1 тогда
СкриптКонтролИнит(scriptCtrl);
КонецЕсли;
РезультатРазбора = СоздатьОбъект("СписокЗначений");
сп = СоздатьОбъект("СписокЗначений");
ТипОбъекта = scriptCtrl.run("eType", obj);
Если ТипОбъекта = "object" Тогда
Для н=0 По scriptCtrl.run("oSize", obj)-1 Цикл
Ключ = scriptCtrl.run("oKey", obj, н);
Значение = scriptCtrl.run("oValueByKey", obj, Ключ);
ТипЗнач = scriptCtrl.run("eType", Значение);
Если Найти("number, string", ТипЗнач) > 0 Тогда
сп.ДобавитьЗначение(Значение, Ключ);
ИначеЕсли Найти("object, array", ТипЗнач) > 0 Тогда
сп.ДобавитьЗначение(jsonВСписок(Значение), Ключ);
КонецЕсли;
КонецЦикла;
ИначеЕсли ТипОбъекта = "array" Тогда
Для н=0 По obj.length-1 Цикл
Значение = scriptCtrl.run("aGet", obj, н);
ТипЗнач = scriptCtrl.run("eType", Значение);
Если Найти("number, string", ТипЗнач) > 0 Тогда
сп.ДобавитьЗначение(Значение, СокрЛП(Строка(н)));
ИначеЕсли Найти("object, array", ТипЗнач) > 0 Тогда
сп.ДобавитьЗначение(jsonВСписок(Значение), СокрЛП(Строка(н)));
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат сп;
КонецФункции //jsonВСписок(obj)
//*********************************************************************************
Функция глРазборJSON(Знач Стр) Экспорт //На входе строка в текущей системной кодировке
Если ПустоеЗначение(scriptCtrl)=1 тогда
СкриптКонтролИнит(scriptCtrl);
КонецЕсли;
Попытка
т = Создатьобъект("Текст");
т.ДобавитьСтроку(Стр);
т.Записать(КаталогИБ()+"err1C.txt");
Рез = scriptCtrl.run("parseJSON", стр ); //Работает
Исключение
Сообщить("Ошибка в разборе json: "+Лев(Стр, 220));
ВызватьИсключение;
КонецПопытки;
сп = jsonВСписок(Рез);
Возврат сп;
КонецФункции //глРазборJSON(Знач Стр)