Spaces:
Sleeping
Sleeping
| import hashlib | |
| import json | |
| from typing import Optional, Dict, Any | |
| def hash_string_sha256(input_string): | |
| # Encode the input string to bytes | |
| encoded_string = input_string.encode("utf-8") | |
| # Create a SHA-256 hash object | |
| sha256_hash = hashlib.sha256() | |
| # Update the hash object with the encoded string | |
| sha256_hash.update(encoded_string) | |
| # Get the hexadecimal digest of the hash | |
| hex_digest = sha256_hash.hexdigest() | |
| return hex_digest | |
| def extract_valid_json(content: str) -> Optional[Dict[str, Any]]: | |
| """ | |
| Extract the first valid JSON object from a string and return the JSON object | |
| along with the rest of the string without the JSON. | |
| Args: | |
| content (str): The input string containing potential JSON data. | |
| Returns: | |
| Tuple[Optional[Dict[str, Any]], str]: | |
| - Extracted JSON dictionary if valid, else None. | |
| - The rest of the string without the extracted JSON. | |
| """ | |
| search_start = 0 | |
| while True: | |
| # Find the next opening brace | |
| start_idx = content.find("{", search_start) | |
| if start_idx == -1: | |
| # No more '{' found; stop searching | |
| return None | |
| # Track brace depth | |
| brace_depth = 0 | |
| # This will store the end of the matching closing brace once found | |
| end_idx = None | |
| for i in range(start_idx, len(content)): | |
| char = content[i] | |
| if char == "{": | |
| brace_depth += 1 | |
| elif char == "}": | |
| brace_depth -= 1 | |
| # If brace_depth returns to 0, we’ve found a potential JSON substring | |
| if brace_depth == 0: | |
| end_idx = i | |
| break | |
| # If we never returned to depth 0, it means we couldn't find a matching '}' | |
| if end_idx is None: | |
| return None | |
| # Extract the candidate substring | |
| candidate = content[start_idx : end_idx + 1] | |
| # Try to parse it | |
| try: | |
| parsed = json.loads(candidate) | |
| # If parsed successfully, check if it's a dict | |
| if isinstance(parsed, dict): | |
| return parsed | |
| except json.JSONDecodeError: | |
| # Not valid JSON, keep going | |
| pass | |
| # Move just past the current opening brace to look for another candidate | |
| search_start = start_idx + 1 | |