code: def from_json(cls, json):
      
      if json[cls.KEY_RANGE_PARAM] is None:
        # pylint: disable=redefined-outer-name
        key_ranges = None
      else:
        key_ranges = []
        for k in json[cls.KEY_RANGE_PARAM]:
          if k:
            key_ranges.append(key_range.KeyRange.from_json(k))
          else:
            key_ranges.append(None)
  
      if json[cls.NAMESPACE_RANGE_PARAM] is None:
        ns_range = None
      else:
        ns_range = namespace_range.NamespaceRange.from_json_object(
            json[cls.NAMESPACE_RANGE_PARAM])
  
      if json[cls.CURRENT_KEY_RANGE_PARAM] is None:
        current_key_range = None
      else:
        current_key_range = key_range.KeyRange.from_json(
            json[cls.CURRENT_KEY_RANGE_PARAM])
  
      return cls(
          json[cls.ENTITY_KIND_PARAM],
          key_ranges,
          ns_range,
          json[cls.BATCH_SIZE_PARAM],
          current_key_range,
          filters=json.get(cls.FILTERS_PARAM))
docs: Create new DatastoreInputReader from the json, encoded by to_json.
  
      Args:
        json: json map representation of DatastoreInputReader.
  
      Returns:
        an instance of DatastoreInputReader with all data deserialized from json.