Need help with your JSON?

Try our JSON Formatter tool to automatically identify and fix syntax errors in your JSON. JSON Formatter tool

Troubleshooting JSON.parse() Failures

The JSON.parse() method is a fundamental JavaScript function used to convert JSON text into a JavaScript object. While it may seem straightforward, developers frequently encounter parsing failures that can be challenging to diagnose. This article explores common causes of JSON.parse() failures and provides practical troubleshooting techniques.

Common Causes of JSON.parse() Failures

1. Syntactically Invalid JSON

The most common reason for JSON.parse() failures is simply that the input string isn't valid JSON. This can happen for several reasons:

  • Missing or mismatched braces, brackets, or quotes
  • Missing or extra commas between elements
  • Unquoted property names (JSON requires double quotes)
  • Trailing commas (not allowed in JSON)
  • Use of single quotes instead of double quotes

Example of Invalid JSON:

{
  name: "John", // Missing quotes around property name
  'age': 30,    // Single quotes instead of double
  "isActive": true,
  "hobbies": ["reading", "cycling",] // Trailing comma
}

2. Control Characters and Invisible Characters

JSON is sensitive to invisible characters like line breaks, tabs, and special control characters. When copying JSON from various sources, invisible characters can sneak in and cause parsing errors.

Common Error:

SyntaxError: Unexpected token � in JSON at position 42

This typically indicates the presence of non-ASCII characters or byte-order marks (BOM) in the JSON string.

3. Numeric Precision Issues

JavaScript has limitations in handling very large numbers. When parsing JSON with large integers (beyond the safe integer range of ±2^53), precision can be lost.

Example:

// Large number in JSON
const jsonString = '{"id": 9007199254740993}';
const parsed = JSON.parse(jsonString);
console.log(parsed.id); // May not represent the exact number

Step-by-Step Troubleshooting Techniques

1. Use JSON Validators

Before attempting to debug code, use online JSON validators or the JSON formatter in Offline Tools to check if your JSON is structurally valid. These tools usually provide detailed error messages with line and column references.

2. Examine Error Messages Carefully

JSON.parse() errors typically include position information that can help identify the issue:

SyntaxError: Unexpected token , in JSON at position 28

This indicates a syntax error at character position 28, possibly a comma in the wrong place.

3. Try/Catch for Graceful Handling

Always wrap JSON.parse() calls in try/catch blocks to handle parsing errors gracefully:

try {
  const data = JSON.parse(jsonString);
  // Process data
} catch (error) {
  console.error("JSON parsing failed:", error.message);
  // Handle the error or provide feedback to the user
}

4. Log the Raw JSON

When debugging, log the actual string being parsed. This can help identify if the JSON is getting corrupted before reaching JSON.parse():

console.log("Raw JSON:", jsonString);
try {
  const data = JSON.parse(jsonString);
} catch (error) {
  console.error("Parsing error:", error);
}

5. Use JSON.parse() with Reviver Function

The JSON.parse() method accepts a second parameter called a reviver function that can help handle special cases:

const data = JSON.parse(jsonString, (key, value) => {
  // Handle large integers as strings
  if (typeof value === 'number' && !Number.isSafeInteger(value)) {
    return value.toString();
  }
  return value;
});

Common Scenarios and Solutions

API Response Parsing Failures

When working with APIs, sometimes the response isn't valid JSON despite the Content-Type header suggesting it is. Common issues include:

  • Error responses with HTML instead of JSON
  • Mixed content types in the response
  • JSON with JavaScript comments

Solution: Inspect the raw response before parsing. Some HTTP clients allow you to examine the exact content received from the server.

LocalStorage Parsing Issues

When retrieving JSON from localStorage or sessionStorage, ensure the data was properly serialized when stored:

// Storing data
localStorage.setItem('user', JSON.stringify(userObject));

// Retrieving data
try {
  const user = JSON.parse(localStorage.getItem('user'));
  if (user === null) {
    // Handle case where item doesn't exist
  }
} catch (error) {
  // Handle parsing error
}

Advanced Troubleshooting Techniques

Using JSON5 for More Lenient Parsing

For development purposes, you might consider using the JSON5 library, which is more forgiving than standard JSON:

  • Allows comments
  • Permits trailing commas
  • Accepts single quotes
  • Supports unquoted property names

However, remember that JSON5 should only be used in development, not for production data exchange.

Creating Custom JSON Sanitizers

For consistently problematic JSON, you might create a sanitization function:

function sanitizeJson(jsonString) {
  // Remove potential control characters
  const sanitized = jsonString.replace(/[\u0000-\u001F]/g, '');
  
  // Try to parse
  try {
    return JSON.parse(sanitized);
  } catch (error) {
    console.error("Sanitization couldn't fix JSON:", error);
    throw error;
  }
}

Conclusion

Troubleshooting JSON.parse() failures is a common task for developers working with JSON data. By understanding the common causes and applying systematic debugging techniques, most parsing issues can be quickly identified and resolved. Remember that prevention is better than cure—validating JSON before attempting to parse it can save considerable debugging time.

For complex JSON documents, consider using a specialized JSON formatter tool that helps identify and fix errors automatically, making the debugging process much more efficient.

Need help with your JSON?

Try our JSON Formatter tool to automatically identify and fix syntax errors in your JSON. JSON Formatter tool