class_docstr: Reader object that loads experiences from JSON file chunks.
  
  The input files will be read from in random order.
code: def next(self) -> SampleBatchType:
      ret = []
      count = 0
      while count < self.batch_size:
          batch = self._try_parse(self._next_line())
          tries = 0
          while not batch and tries < 100:
              tries += 1
              logger.debug(
                  "Skipping empty line in {}".format(self.cur_file)
              )
              batch = self._try_parse(self._next_line())
          if not batch:
              raise ValueError(
                  "Failed to read valid experience batch from file: {}".format(
                      self.cur_file
                  )
              )
          batch = self._postprocess_if_needed(batch)
          count += batch.count
          ret.append(batch)
      ret = concat_samples(ret)
      return ret
  
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 2 for calling the JsonReader obj's underlying member method code with example usage: obj.next() and returns: ret