code: def dump_data_array(dataset_dir, data_dir, array, root=None, compress=True):
      
      if root is None:
          root = {}
      if not array:
          return None
  
      if array.GetDataType() == 12:
          # IdType need to be converted to Uint32
          array_size = array.GetNumberOfTuples() * array.GetNumberOfComponents()
          new_array = vtk.vtkTypeUInt32Array()
          new_array.SetNumberOfTuples(array_size)
          for i in range(array_size):
              new_array.SetValue(i, -1 if array.GetValue(i) <
                                0 else array.GetValue(i))
          pbuffer = memoryview(new_array)
      else:
          pbuffer = memoryview(array)
  
      pMd5 = hashlib.md5(pbuffer).hexdigest()
      ppath = os.path.join(data_dir, pMd5)
      with open(ppath, 'wb') as f:
          f.write(pbuffer)
  
      if compress:
          with open(ppath, 'rb') as f_in, gzip.open(os.path.join(data_dir, pMd5 + '.gz'), 'wb') as f_out:
              shutil.copyfileobj(f_in, f_out)
          # Close then remove.
          os.remove(ppath)
  
      root['ref'] = get_ref(os.path.relpath(data_dir, dataset_dir), pMd5)
      root['vtkClass'] = 'vtkDataArray'
      root['name'] = array.GetName()
      root['dataType'] = jsMapping[arrayTypesMapping[array.GetDataType()]]
      root['numberOfComponents'] = array.GetNumberOfComponents()
      root['size'] = array.GetNumberOfComponents() * array.GetNumberOfTuples()
      root['ranges'] = []
      if root['numberOfComponents'] > 1:
          for i in range(root['numberOfComponents']):
              root['ranges'].append(get_range_info(array, i))
          root['ranges'].append(get_range_info(array, -1))
      else:
          root['ranges'].append(get_range_info(array, 0))
  
      return root
docs: Dump vtkjs data arry