class_docstr: Reader object that loads experiences from JSON file chunks.
  
  The input files will be read from in random order.
code: def _next_file(self) -> FileType:
      # If this is the first time, we open a file, make sure all workers
      # start with a different one if possible.
      if self.cur_file is None and self.ioctx.worker is not None:
          idx = self.ioctx.worker.worker_index
          total = self.ioctx.worker.num_workers or 1
          path = self.files[
              round((len(self.files) - 1) * (idx / total))
          ]
      # After the first file, pick all others randomly.
      else:
          path = random.choice(self.files)
      return self._try_open_file(path)
  
imports: import glob
  import json
  import logging
  import math
  import numpy
  import os
  from pathlib import Path
  import random
  import re
  import tree
  from typing import List, Optional, TYPE_CHECKING, Union
  from urllib.parse import urlparse
  import zipfile
  from ray.rllib.offline.input_reader import InputReader
  from ray.rllib.offline.io_context import IOContext
  from ray.rllib.policy.policy import Policy
  from ray.rllib.policy.sample_batch import DEFAULT_POLICY_ID, MultiAgentBatch, SampleBatch, concat_samples, convert_ma_batch_to_sample_batch
  from ray.rllib.utils.annotations import override, PublicAPI, DeveloperAPI
  from ray.rllib.utils.compression import unpack_if_needed
  from ray.rllib.utils.spaces.space_utils import clip_action, normalize_action
  from ray.rllib.utils.typing import Any, FileType, SampleBatchType
label_desc: Use image node_id 8 for calling the JsonReader obj's underlying member method code with example usage: obj._next_file() and returns: self