{"record":{"id":"d3fc90c918e16f96","repo":"ytdl-org/youtube-dl","slug":"unable-to-extract-0-failed-to-parse-json","errorCode":null,"errorMessage":"Unable to extract {0} - Failed to parse JSON","messagePattern":"Unable to extract (.+?) - Failed to parse JSON","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/common.py","lineNumber":1147,"sourceCode":"        # force an exception\n        kwargs['fatal'] = True\n\n        # self._downloader._format_err(name, self._downloader.Styles.EMPHASIS)\n        for _ in range(2):\n            try:\n                # return self._parse_json(json_string, video_id, ignore_extra=True, **kwargs)\n                transform_source = kwargs.pop('transform_source', None)\n                if transform_source:\n                    json_string = transform_source(json_string)\n                return self._parse_json(json_string, video_id, **compat_kwargs(kwargs))\n            except ExtractorError as e:\n                end = int_or_none(self._search_regex(r'\\(char\\s+(\\d+)', error_to_compat_str(e), 'end', default=None))\n                if end is not None:\n                    json_string = json_string[:end]\n                    continue\n                msg = 'Unable to extract {0} - Failed to parse JSON'.format(name)\n                if fatal:\n                    raise ExtractorError(msg, cause=e.cause, video_id=video_id)\n                elif not has_default:\n                    self.report_warning(\n                        '{0}: {1}'.format(msg, error_to_compat_str(e)), video_id=video_id)\n            return default\n\n    def _html_search_regex(self, pattern, string, name, default=NO_DEFAULT, fatal=True, flags=0, group=None):\n        \"\"\"\n        Like _search_regex, but strips HTML tags and unescapes entities.\n        \"\"\"\n        res = self._search_regex(pattern, string, name, default, fatal, flags, group)\n        if isinstance(res, tuple):\n            return tuple(map(clean_html, res))\n        return clean_html(res)\n\n    def _get_netrc_login_info(self, netrc_machine=None):\n        username = None\n        password = None\n","sourceCodeStart":1129,"sourceCodeEnd":1165,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/common.py#L1129-L1165","documentation":"Error \"Unable to extract {0} - Failed to parse JSON\" thrown in ytdl-org/youtube-dl.","triggerScenarios":"Thrown at youtube_dl/extractor/common.py:1147 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Update youtube-dl; the JSON structure of the site likely changed."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}