import json import re import ast from loguru import logger class JsonProcessor: def process_response(self, response): try: # Search for JSON string in the response json_str_match = re.search(r'\{.*\}', response, re.DOTALL) if json_str_match: # Get the matched JSON string json_str = json_str_match.group() logger.debug(f"Full JSON string: {json_str}") # Try to parse as Python literal first, then convert to JSON try: # First try to evaluate as Python literal python_obj = ast.literal_eval(json_str) # Convert to proper JSON response_json = json.loads(json.dumps(python_obj)) except (ValueError, SyntaxError): # Fall back to string replacement method # Replace escape characters and remove trailing commas json_str = json_str.replace("\\", "") json_str = json_str.replace(r'\\_', '_') json_str = re.sub(r',\s*}', '}', json_str) json_str = re.sub(r',\s*\]', ']', json_str) # Convert Python format to JSON format json_str = json_str.replace("'", '"') # Single quotes to double quotes json_str = json_str.replace('None', 'null') # Python None to JSON null # Parse the JSON string response_json = json.loads(json_str) return response_json else: logger.error("No JSON string match found in response.") return None except json.JSONDecodeError as e: logger.error(f"JSONDecodeError: {e}") except Exception as e: logger.error(f"Unexpected error: {e}") return None