docs: def parse_json(value: str, sig_params: List[inspect.Parameter] = None) -> dict:
      """Parse a value as JSON.
  
      This is just a wrapper around json.loads which re-raises any errors as a
      ParseError instead.
  
      :param str value: JSON string.
      :param dict sig_params: The logic function's signature parameters.
      :returns: the parsed JSON value
      """
      try:
          loaded = json.loads(value)
      except Exception as e:
          message = 'Error parsing JSON: %r error: %s' % (value, e)
          logging.debug(message, exc_info=e)
          raise ParseError(message)
  
      if sig_params is not None:
          return map_param_names(loaded, sig_params)
      return loaded