# FormatException: Unexpected character (at character 2)

- **ID:** `flutter/dart-format-exception-json-decode`
- **Domain:** flutter
- **Category:** data_error
- **Verification:** ai_generated
- **Fix Rate:** 90%

## Root Cause

Invalid JSON string received from a network request or local file, possibly truncated or malformed.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| Flutter 3.22.0 | active | — | — |
| Dart 3.4.0 | active | — | — |
| http 1.2.1 | active | — | — |
| dio 5.4.0 | active | — | — |

## Workarounds

1. **Log the raw response body before decoding to inspect the actual content: `print(response.body);` and check for truncation or extra characters.** (95% success)
   ```
   Log the raw response body before decoding to inspect the actual content: `print(response.body);` and check for truncation or extra characters.
   ```
2. **Use a JSON preprocessor to remove BOM or control characters: `String cleaned = response.body.replaceAll(RegExp(r'[\x00-\x1F\x7F]'), '');` then decode.** (80% success)
   ```
   Use a JSON preprocessor to remove BOM or control characters: `String cleaned = response.body.replaceAll(RegExp(r'[\x00-\x1F\x7F]'), '');` then decode.
   ```
3. **Add a retry mechanism with exponential backoff for network requests to handle transient truncation.** (70% success)
   ```
   Add a retry mechanism with exponential backoff for network requests to handle transient truncation.
   ```

## Dead Ends

- **** — Ignoring the error leaves the app in an inconsistent state with null data, causing downstream crashes. (90% fail)
- **** — The format exception is raised by Dart's standard decoder; other libraries use the same parser. (95% fail)
- **** — The error is about JSON syntax, not character encoding; changing encoding may worsen the issue. (85% fail)
