code: def walk_tree_and_extract(self, data, target):
          'Walk tree of properties and extract identifiers and associated values'
          if isinstance(data, dict):
              for key in ['children', 'props',]:
                  self.walk_tree_and_extract(data.get(key, None), target)
              ident = data.get('id', None)
              if ident is not None:
                  idVals = target.get(ident, {})
                  for key, value in data.items():
                      if key not in ['props', 'options', 'children', 'id']:
                          idVals[key] = value
                  if idVals:
                      target[ident] = idVals
          if isinstance(data, list):
              for element in data:
                  self.walk_tree_and_extract(element, targetf walk_tree_and_extract(self, data, target):
          'Walk tree of properties and extract identifiers and associated values'
          if isinstance(data, dict):
              for key in ['children', 'props',]:
                  self.walk_tree_and_extract(data.get(key, None), target)
              ident = data.get('id', None)
              if ident is not None:
                  idVals = target.get(ident, {})
                  for key, value in data.items():
                      if key not in ['props', 'options', 'children', 'id']:
                          idVals[key] = value
                  if idVals:
                      target[ident] = idVals
          if isinstance(data, list):
              for element in data:
                  self.walk_tree_and_extract(element, target)
docs: Walk tree of properties and extract identifiers and associated values