class_docstr: Encapsulation of encoding algorithms for S3 data.
  
  Right now we only support JSON encoding. In the future, we could potentially support
docstr: Params:
      driver (PersistenceDriver)
      bytes_data (bytes)
  
  Returns: (string|dict|list|mixed)
docstr_tok: ["Params",":","driver","(","PersistenceDriver",")","bytes_data","(","bytes",")","Returns",":","(","string|dict|list|mixed",")"]
code: def json_decode(driver, bytes_data):
      """
      Params:
          driver (PersistenceDriver)
          bytes_data (bytes)
  
      Returns: (string|dict|list|mixed)
      """
      try:
          data = json.loads(bytes_data)
          LOGGER.debug(
              "LookupTable (%s): File successfully JSON decoded. Discovered %s keys.",
              driver.id,
              len(data),
          )
          return data
      except ValueError:
          LOGGER.exception(
              "LookupTable (%s): Failed to json decode data", driver.id
          )
  
imports: import json
  import sys
  import time
  import zlib
  import boto3
  from botocore.exceptions import ClientError, ConnectTimeoutError, ReadTimeoutError
  import streamalert.shared.helpers.boto
  from streamalert.shared.logger import get_logger
  from streamalert.shared.lookup_tables.cache import DriverCache
  from streamalert.shared.lookup_tables.drivers import PersistenceDriver
  from streamalert.shared.lookup_tables.errors import LookupTablesCommitError, LookupTablesInitializationError
label_desc: Use image node_id 2 for calling the Encoding obj's underlying member method code with example usage: obj.json_decode(driver, bytes_data) and returns: data