r"""Decodes the JSON response body (if any) as a Python object. This may return a dictionary, list, etc. depending on what is in the response. :param \*\*kwargs: Optional arguments that ``json.loads`` takes. :raises requests.exceptions.JSONDecodeError: If the response body
(self, **kwargs: Any)
| 1085 | return content |
| 1086 | |
| 1087 | def json(self, **kwargs: Any) -> Any: |
| 1088 | r"""Decodes the JSON response body (if any) as a Python object. |
| 1089 | |
| 1090 | This may return a dictionary, list, etc. depending on what is in the response. |
| 1091 | |
| 1092 | :param \*\*kwargs: Optional arguments that ``json.loads`` takes. |
| 1093 | :raises requests.exceptions.JSONDecodeError: If the response body does not |
| 1094 | contain valid json. |
| 1095 | """ |
| 1096 | |
| 1097 | if not self.encoding and self.content and len(self.content) > 3: |
| 1098 | # No encoding set. JSON RFC 4627 section 3 states we should expect |
| 1099 | # UTF-8, -16 or -32. Detect which one to use; If the detection or |
| 1100 | # decoding fails, fall back to `self.text` (using charset_normalizer to make |
| 1101 | # a best guess). |
| 1102 | encoding = guess_json_utf(self.content) |
| 1103 | if encoding is not None: |
| 1104 | try: |
| 1105 | return complexjson.loads(self.content.decode(encoding), **kwargs) |
| 1106 | except UnicodeDecodeError: |
| 1107 | # Wrong UTF codec detected; usually because it's not UTF-8 |
| 1108 | # but some other 8-bit codec. This is an RFC violation, |
| 1109 | # and the server didn't bother to tell us what codec *was* |
| 1110 | # used. |
| 1111 | pass |
| 1112 | except JSONDecodeError as e: |
| 1113 | raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) |
| 1114 | |
| 1115 | try: |
| 1116 | return complexjson.loads(self.text, **kwargs) |
| 1117 | except JSONDecodeError as e: |
| 1118 | # Catch JSON-related errors and raise as requests.JSONDecodeError |
| 1119 | # This aliases json.JSONDecodeError and simplejson.JSONDecodeError |
| 1120 | raise RequestsJSONDecodeError(e.msg, e.doc, e.pos) |
| 1121 | |
| 1122 | @property |
| 1123 | def links(self) -> dict[str, dict[str, str]]: |