|null Decoded associative array, or null on failure. */ public static function decode( string $raw ): ?array { $trimmed = trim( $raw ); // 1. Clean JSON — best case. $decoded = json_decode( $trimmed, true ); if ( is_array( $decoded ) ) { return $decoded; } // 2. Markdown-fenced JSON (```json ... ``` or ``` ... ```). if ( preg_match( '/```(?:json)?\s*\n?(.*?)\n?\s*```/s', $trimmed, $matches ) ) { $decoded = json_decode( trim( $matches[1] ), true ); if ( is_array( $decoded ) ) { return $decoded; } } // 3. Brute-force: find outermost { ... } substring. $first_brace = strpos( $trimmed, '{' ); $last_brace = strrpos( $trimmed, '}' ); if ( false !== $first_brace && false !== $last_brace && $last_brace > $first_brace ) { $candidate = substr( $trimmed, $first_brace, $last_brace - $first_brace + 1 ); $decoded = json_decode( $candidate, true ); if ( is_array( $decoded ) ) { return $decoded; } } return null; } }