code: def json_compat_obj_decode_helper(self, data_type, obj):
          
          if isinstance(data_type, bv.StructTree):
              return self.decode_struct_tree(data_type, obj)
          elif isinstance(data_type, bv.Struct):
              return self.decode_struct(data_type, obj)
          elif isinstance(data_type, bv.Union):
              if self.old_style:
                  return self.decode_union_old(data_type, obj)
              else:
                  return self.decode_union(data_type, obj)
          elif isinstance(data_type, bv.List):
              return self.decode_list(
                  data_type, obj)
          elif isinstance(data_type, bv.Map):
              return self.decode_map(
                  data_type, obj)
          elif isinstance(data_type, bv.Nullable):
              return self.decode_nullable(
                  data_type, obj)
          elif isinstance(data_type, bv.Primitive):
              # Set validate to false because validation will be done by the
              # containing struct or union when the field is assigned.
              return self.make_stone_friendly(data_type, obj, False)
          else:
              raise AssertionError('Cannot handle type %r.' % data_type)
docs: See json_compat_obj_decode() for argument descriptions.