|
v7: Форматирование JSON данных в 1с 7.7 | ☑ | ||
---|---|---|---|---|
0
From_RB
15.11.20
✎
09:56
|
Возможно кому-то попадался аналог https://jsonformatter.curiousconcept.com/# для форматирования JSON текста в "удобоваримый" вид) ?
|
|||
1
babytype
15.11.20
✎
13:53
|
Мне хватало этого (нарыто на просторах сети давно) для небольших размеров 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(код); КонецПроцедуры //====================================================================== // для парсинга JSON (взято из сети) Функция jsonВСписок(obj) Если ПустоеЗначение(scriptCtrl)=1 тогда СкриптКонтролИнит(scriptCtrl); КонецЕсли; РезультатРазбора = СоздатьОбъект("СписокЗначений"); //Сообщить(scriptCtrl.run("oSize", obj)); //Размер объекта (количество пар ключ-значение) //Сообщить(scriptCtrl.run("oKey", obj, 1)); //Ключ пары с номером 1 //Сообщить(scriptCtrl.run("oValueByKey", obj, "id")); //Получить значение объекта по ключу //Сообщить(scriptCtrl.run("aGet", obj.products, 0).id); //Получить Элемент массива с индексом 0 //Сообщить(scriptCtrl.run("eType", obj.products)); //Получить тип объекта, даже если он - массив сп = СоздатьОбъект("СписокЗначений"); ТипОбъекта = 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 (взято из сети) //Возвращаемое значение можно разбирать с помощью стандартной функции //Получить(<Имя поля>) // для типа переменной "Список значений", или стандартной же функции //ПолучитьЗначение(<НомерПоля>[,<Ключ>]) Функция ПреобразоватьJSONВДревовидныйСписок(Знач Стр) Если ПустоеЗначение(scriptCtrl)=1 тогда СкриптКонтролИнит(scriptCtrl); КонецЕсли; Рез = scriptCtrl.run("parseJSON", стр ); сп = jsonВСписок(Рез); Возврат сп; КонецФункции // //====================================================================== //из древовидной структуры выгружает данные в линейный список по пути через точку // список - древовидный список // РезСписок - линейный список // Путь - служебный, для рекурсии Функция ПреобразоватьДревовидныйСписокВЛинейный(Список,РезСписок,Путь = "") Представление = ""; Рзд = "."; Для НомПП=1 По Список.РазмерСписка() Цикл Значение = Список.ПолучитьЗначение(НомПП, Представление); Если ТипЗначения(Значение) = 100 Тогда //если список значений - пишем путь через разделитель Путь = ?(Путь = "",Представление,Путь+Рзд+Представление); ПреобразоватьДревовидныйСписокВЛинейный(Значение, РезСписок, Путь); Путь = ?(Найти(Путь,Рзд)>0,Лев(Путь,СтрДлина(Путь)-СтрДлина(Рзд+Представление)),СтрЗаменить(Путь,Представление,"")); Продолжить; КонецЕсли; ПутьВСписок = ?(Путь = "",Представление,Путь+Рзд+Представление); РезСписок.ДобавитьЗначение(Значение,ПутьВСписок); //Сообщить(ПутьВСписок + " : " + Значение + ", Тип:"+СокрЛП(ТипЗначения(Значение))); КонецЦикла; Возврат 0; КонецФункции // ПреобразоватьДревовидныйСписокВЛинейный //====================================================================== //Функция для конвертации JSON в линейный список. //На входе строка в текущей системной кодировке //Возвращает список значений Функция РазборJSON(Знач Стр) спДревовидный = СоздатьОбъект("СписокЗначений"); спЛинейный = СоздатьОбъект("СписокЗначений"); спДревовидный = ПреобразоватьJSONВДревовидныйСписок(Стр); ПреобразоватьДревовидныйСписокВЛинейный(спДревовидный,спЛинейный); Возврат спЛинейный; КонецФункции // РазборJSON |
|||
2
From_RB
15.11.20
✎
15:28
|
(1) Спасибо, но немного не то.
В данном случае мне надо не распарсить json, а отформатировать для удобного анализа структуры. |
|||
3
Ёпрст
15.11.20
✎
19:12
|
(2) нотепаде++ умеет, точнее, плаггин к нему
|
|||
4
From_RB
15.11.20
✎
20:05
|
(3) Как вариант поставил плагин для нотепад++ https://github.com/kapilratnani/JSON-Viewer/releases/tag/v1.40
з.ы. Однако хотелось бы все-таки под сабж))) |
|||
5
tgu82
15.11.20
✎
21:14
|
(1) А для меня как раз то. Писать в джейсон могем а вот читать его в структуры 1С пока не могем а похоже что надо уже.
|
|||
6
Ёпрст
15.11.20
✎
23:46
|
(4) такой стоит, вроде, не помню
https://www.sunjw.us/jstool/npp/ |
|||
7
Ёпрст
15.11.20
✎
23:47
|
Тебе онлайн надо что ле ?
|
|||
8
trdm
16.11.20
✎
06:38
|
(4) > з.ы. Однако хотелось бы все-таки под сабж)))
Ну и в чем проблема? Если жабаскрипт его разбирает, что для него плевое дело, то на нем же пишешь обход коллекции с форматированием и добавляешь метод к (1). |
|||
9
alyuev
16.11.20
✎
12:35
|
Есть такой вариант: http://json.parser.online.fr/
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |