Иерархия в json #781125


#0 by olegon7
Здравствуйте, подскажите как реализовать иерархию в json. от сервиса буду получать ответ в формате json. данные в нем связаны иерархически. Данные записаны в json массивом. На основе этих данных буду строить отчет с группировкой.
#1 by Asmody
И как вы массивом передаете иерархические данные? *мне чисто для образования
#2 by olegon7
вот надо придумать например через айди родителя
#3 by Asmody
Передавай массив пар.
#4 by DrShad
тоже сейчас вштырили всякие json? php  и иже с ними для создания json данных пользую обработку 1С:JSON. JavaScript Object Notation парсер и сериализатор.
#5 by olegon7
не понял, можно поподробнее
#6 by DrShad
тут все зависит от того как ты потом отражать будешь иерархию
#7 by olegon7
принимаю json преобразовываю в тз , тз использую как внешний источник для построения отчета в скд
#8 by olegon7
в отчете обычная группировка. т.е. Подстанция __________Фидер _______________ТП т.е . элемент коллекции может быть одним из этих значений
#9 by DrShad
так тут не 1С-ский сервис, а внешний и как на внешнем ресурсе отражена иерархия? да и зачем в СКД пихать иерархию если ее можно в самой СКД построить как угодно
#10 by DrShad
ну так выгружай кроме самого элемента его родительский вот и заготовка для иерархии
#11 by Ластик
Массив в массиве приходит, если я правильно понял вопрос, таким образом в json иерархия и строится как я понял. Сам не писал приходилось обмен допиливать где именно так дело было, приходил файл с вложенными массивами.
#12 by DrShad
у тебя же есть ChildNode и ParentNode в СКД создаешь набор данных и соединяешь его сам с собой по ChildNode = ParentNode
#13 by DrShad
кстати обработка из умеет также читать json
#14 by olegon7
попробую
#15 by olegon7
Массив в массиве ? В какой объект 1с его можно преобразовать?
#16 by olegon7
Массив в массиве ? В какой объект 1с его можно преобразовать?
#17 by DrShad
да хоть в ТЗ, вот только ее нельзя будет в СКД запихнуть
#18 by AceVi
Че вы огород городите. Все уже давно придумано за вас - реквизит Родитель в нем указываешь УИД или Код что там у тебя есть и все. Вот вообще не понятно как у тебя из ТЗ иерархия получается. Что то ты недоговариваешь.
#19 by Torquader
Нет, а в чём проблема передачи иерархии ? У каждого элемента есть массив дочерних - назовём его Children и всё. Вот когда нужно будет передать граф или группу, тогда придётся уже искать идентификаторы и чесать репу. Аналогом иерархии можно рассматривать объект ДеревоЗначений из 1С - оно должно успешно сериализоваться в JsOn.
#20 by olegon7
т.е . 2 создать набора данных (тз) , запихнуть его в скд. И соединить эти 2 набора по связи ChildNode = ParentNode левым соединением? я правильно понял?
#21 by olegon7
структура json {"Items":[{"ObjectType":"Фидер","ObjectCode":"1253-ав-2332","ObjectName":"10 кВ Ф-662","TimeStamp":"01.06.2015","PreviousValue":423423,"NextValue":254235,"Difference":null,"ParentCode":4376-ап-232}, ... вот этот json преобразуется в массив. массив в скд не передашь. как поменять структуру json что бы получилась тз? если элемент верхнего уровня ParentCode какое должен иметь значение "" или null?
#22 by DrShad
1 набор данных и соединить его сам с собой
#23 by DrShad
ну во-первых это не массив, а структура
#24 by olegon7
в скд можно соединять наборы только левы соединением насколько я помню.... почему не массив.... Вот так я получаю ответ от сервиса Строка=Ответ.ПолучитьТелоКакСтроку("UTF-8"); Items это массив как раз таки
#25 by AceVi
А если там не 1 уровень подчиненности а 3? Иерархия строиться только в рекурсии и не в запросах. В запросах можно использовать только заранее созданную иерархию в справочниках. Ок Items - массив - а в массиве что храниться? а там Структура - потому что у каждого элемента помимо значения есть наименованиеключ.
#26 by DrShad
а вот тут массив
#27 by DrShad
а по фигу сколько уровней вложенности соединением набора данных сам с собой получаем всю описанную структуру иерархии сколько бы там не было уровней
#28 by DrShad
наслаждайтесь
#29 by olegon7
Хорошо я получу массив из сервиса, мне этот массив надо будет преобразовать в тз? чтобы запихнуть в скд во внешний набор данных так? потому что кроме этого набора я в отчете буду использовать еще два . Один из Mysql а второй непосредственно из 1с. И мне их тоже надо будет соединить по полю ObjectCode . Причем соединять надо только элементы нижнего уровня из первого набора с элементами из второго и третьего набра по полю ObjectCode.
#30 by DrShad
ну да источником набора может быть в твоем случае только ТЗ
#31 by DrShad
как преобразовать массив структур в ТЗ надо объяснять?
#32 by AceVi
Это не левое соединение в запросе - это именно связь наборов данных. И иерархия там строиться не запросом, и в приведенном тобой примере(1 ссылка) не заполнена колонка "параметр" по которому собственно и определяеться иерархия. Грубо говоря - в таком случае для каждой строки из "источника связи" будет выполняться весь запрос из "приемника связи" в который будет передан параметр(например код). Просто левое соединение не сработает.
#33 by DrShad
есть решения и без параметров ищущий да найдет
#34 by DrShad
#35 by olegon7
Таким образом?
#36 by DrShad
в принципе да, только учти в json массиве у тебя не обязательно в первом же элементе будут все ключи структуры
#37 by olegon7
у меня в итоге будут 3 набора данных первый набор- из сервиса (тз1) второй набор - из mysql (тз2) третий набор - из 1 с (тз3) как расставить связи в скд между наборами первая связь понятна тз1 - тз1 левое соединение по полям ObjectCode = ParentCode как организовать связь с двумя другими наборами?
#38 by DrShad
а связь ли нужна? может объединения хватит?
#39 by DrShad
потому как связь то левая, но слишком часто она сваливается во внутреннее соединение
#40 by olegon7
попробую объяснить в тз2 и в тз2 содержаться абоненты которые тоже должны быть подчинены самому нижнему уровню из т31. а связываются они по коду ObjectCode. Т е данные из тз2 и тз3 еще один уровень получается четвертый. В тз1 может хранится только 3 уровня вложенности.
#41 by DrShad
не видя ваших данных что либо объяснять бессмысленно, все наводки вам дали - дерзайте
#42 by olegon7
1)скажите элемент верхнего уровня в поле ParentCode Заполнять чем? null или пустым значением? 2)если я сначала объединю все 3 набора , а потом сделаю соединение самим с собой по полю code. Все пройдет правильно? Что первично соединение или объединение?
#43 by DrShad
а хз, нужно эксперементировать
#44 by olegon7
получил тз от сервиса соединяю само с собой получаю ошибку не найдено поле замены "КодОбъекта" что делать ?
#45 by DrShad
для начала показать описание набора данных
#46 by olegon7
разобрался с этой ошибкой описание полей в скд должно совпадать с описанием полей в тз сейчас другая ошибка соединяю набор сам с собой получаю в ответ
#47 by olegon7
#48 by AceVi
По русски же все пишет. Зайди на вкладку Связь наборов данных там есть 2 колонки которые так называются вот их и заполни. И читай внимательно те ссылки которые тут в теме. особенно ту что ведет в гугл)
#49 by olegon7
Начальное значение связи набора данных заполнил "" строкой Я так понимаю параметр отвечающий за верхний уровень чтобы система понимала у меня у элемента верхнего уровня поле ParentCode пустая строка ошибка пропала , но в отчет ничего не выводит. Что не так сделал? подскажите
#50 by AceVi
Не знаю что не так. я твои ТЗ и отчет не видел. выгрузи ТЗ в эксел(надеюсь знаешь как быстро сделать? это все стандартными способами делается за 3 секунды) И обработку свою на почту мне вышли.
#51 by AceVi
Да даже можно в 1С формате ТЗ сохранить.
#52 by DrShad
а вот я бы так не смог - уже очень давно ничего не делаю за других ))))))
#53 by olegon7
отправил вам на почту , посмотрите пожалуйста... если не получится буду работать с тз запросами еще до помещения во внешний источник скд...
#54 by AceVi
Как будет время гляну. предположительно после 15.
#55 by olegon7
Ошибка тип не может быть выбран в запросе на вторую строку запроса тз1 создал программно , указав принудительно типы полей
#56 by olegon7
вроде бы получилось, загвоздка была в типе данных...как я и думал ..
#57 by DrShad
ну вот, можешь, когда захочешь
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С