Изменить значения в комплексе JSON для нескольких вхождений в Python - PullRequest
0 голосов
/ 10 февраля 2020

Сценарий таков:

У меня огромная переменная JSON в Python. Это JSON описывает модель или диаграмму (BPMN, EPK, организационная диаграмма и т. Д. c). Это действительно большие, например, 3000 строк и более. Это выглядит примерно так:

model_json = 
{
     modelId: 239475,
     type: BPMN,
     # some other diagram information,
     childShapes: [
          {
               stencil: Pool,
               title: Company XY,
               positionData: { some stuff },
               ...
               childShapes: [
                    {
                         stencil: Lane,
                         title: Engineering,
                         attributes: {
                              head: Peter,
                              costCenter: T534                              
                         },
                         childShapes: [
                              {
                                   stencil: Task,
                                   title: Review Code,
                                   attributes: {
                                        executive: Mark
                                   },
                              },
                              {
                                   stencil: Task,
                                   title: Push New Commit,
                                   attributes: {
                                        executive: Michael
                                   },
                              },
                              ...
                         ]
                    }, 
                    ...
               ]
          },
          ...
     ]
     ...
}

Как правило, атрибуты определенных форм одинаковы для всех элементов. Они централизованы, поэтому, если я определю атрибут duration на stencil: Task, каждая форма задачи будет иметь этот атрибут в JSON со значением или без него.

Чего я пытаюсь достичь:

Мне нужно выполнить массовое изменение, например, всех форм заданий, где я должен изменить атрибут executive на что-то другое. Ребята, вы знаете хороший способ сделать это в Python без создания бесконечных циклов и получения каждого атрибута по его полному пути JSON, например model_json['childShapes'][i]['childShapes'][e]['childShapes'][k]['attributes']['executive'] = Tim? Я спрашиваю об этом, потому что мне нужно это JSON, чтобы потом зафиксировать изменения на самой диаграмме, поэтому в лучшем случае: структура исходной JSON сохраняется в течение всей процедуры, и у меня есть JSON, который выглядит именно так один выше, но только атрибут executive изменился.

Добавление:

Эта массовая операция может быть выполнена с этим отвратительным методом прохождения JSON с использованием всего пути, но для этого существует гораздо больше вариантов использования, поэтому для каждой операции потребуются свои собственные настраиваемые вложенные циклы и пути для работы.

...