JSON (JavaScript Object Notation) is the universal text format for exchanging structured data on the web, and writing valid JSON comes down to a handful of unbreakable rules from RFC 8259: every key and string value must be wrapped in double quotes, no trailing comma may follow the last element, comments are not allowed, and each value must be exactly one of six types — string, number, object, array, boolean, or null. Follow those rules and any parser on any platform will accept your data; break one and you get a syntax error at a specific line and column.
That's the summary an AI Overview would give you. Here's what it can't show you — the exact valid-versus-invalid pairs for every rule that trips people up, a reference table you can scan in seconds, and diagrams of how JSON's structure and validation actually work. The rest of this guide is the cheat sheet.
JSON Validity Rules at a Glance
Most JSON errors come from applying JavaScript, YAML, or Python habits to a format that is stricter than all three. This table is the fast lookup: what breaks, why, and the exact fix.
| Rule | Invalid ✗ | Valid ✓ | Why |
|---|---|---|---|
| Quote your keys | { name: "Jo" } | { "name": "Jo" } | Keys must be double-quoted strings |
| Double quotes only | { 'name': 'Jo' } | { "name": "Jo" } | Single quotes are invalid |
| No trailing comma | [1, 2, 3,] | [1, 2, 3] | Nothing may follow the last element |
| No comments | { "a": 1 } // note | { "a": 1, "_note": "..." } | Comments are not part of JSON |
| Numbers unquoted | { "age": "30" } | { "age": 30 } | "30" is a string, not a number |
No NaN/Infinity | { "x": NaN } | { "x": null } | Only finite numbers are allowed |
| No leading zeros | { "id": 007 } | { "id": 7 } | 007 is not a valid number literal |
| Escape special chars | "C:\Users" | "C:\\Users" | Backslash must be escaped |
| One root value | {"a":1}{"b":2} | {"a":1,"b":2} | A document has exactly one root |
| When in doubt | Guessing | Run a validator | Parsers pinpoint the exact error |
The last row is the honest answer to every "is this valid?" question: paste it into our JSON Validator and let the parser tell you the line and column instead of eyeballing brackets.
The Six JSON Value Types
Every value in JSON is exactly one of six types. Getting the type right — especially not quoting numbers and booleans — prevents a whole class of downstream bugs.
Core JSON Syntax Rules
JSON has strict syntax requirements. Unlike JavaScript objects, JSON doesn't allow trailing commas, single quotes, or comments. Every key must be a double-quoted string, and values must be one of six types: string, number, object, array, boolean, or null.
{
"name": "John Doe",
"age": 30,
"isActive": true,
"email": null,
"tags": ["developer", "designer"],
"address": {
"city": "Austin",
"state": "TX"
}
}
Common JSON Syntax Errors
Trailing commas are the most frequent JSON error. The last item in an object or array must not have a comma after it:
// Invalid - trailing comma
{ "name": "John", "age": 30, }
// Valid
{ "name": "John", "age": 30 }
Single quotes don't work in JSON. Always use double quotes for strings and keys:
// Invalid
{ 'name': 'John' }
// Valid
{ "name": "John" }
Unquoted keys cause parsing failures:
// Invalid
{ name: "John" }
// Valid
{ "name": "John" }
Formatting Best Practices
Use consistent indentation. Two or four spaces are standard. Avoid tabs for maximum compatibility.
Keep nesting shallow. Deeply nested JSON becomes hard to read and maintain. If you're beyond 4-5 levels deep, consider restructuring your data.
Use meaningful key names. Keys like firstName are clearer than fn or x1. Your JSON is documentation.
Order keys logically. Group related fields together. Put identifiers first, metadata last.
Number Handling
JSON numbers don't have quotes and support integers, decimals, and scientific notation:
{
"integer": 42,
"decimal": 3.14159,
"scientific": 1.23e10,
"negative": -273.15
}
Avoid special values like NaN, Infinity, or leading zeros (except for decimals under 1). These aren't valid JSON.
Handling Special Characters
Strings must escape certain characters: backslash (\\), double quote (\"), and control characters. Unicode escapes work for any character:
{
"quote": "She said \"Hello\"",
"path": "C:\\Users\\Documents",
"emoji": "\u2764"
}
Validating Your JSON
Always validate JSON before deploying or transmitting it. Validation happens in two independent stages: first the parser checks that the syntax is well-formed (quotes, commas, brackets), then — optionally — JSON Schema checks that the structure matches what you expect (required fields, types, formats). A document can be syntactically perfect and still be wrong for your API.
Use our JSON Validator to catch syntax errors, see detailed error messages with line numbers, and format your JSON properly. Validation catches issues like:
- Missing or extra commas
- Mismatched brackets
- Invalid escape sequences
- Encoding problems
JSON Schema for Structure Validation
Beyond syntax validation, JSON Schema lets you define the expected structure of your data:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["name", "email"],
"properties": {
"name": { "type": "string" },
"email": { "type": "string", "format": "email" }
}
}
Performance Considerations
Minimize payload size for API responses. Remove unnecessary whitespace in production (minification) while keeping formatted JSON in development.
Use appropriate data types. Don't quote numbers or booleans. "true" is a string, not a boolean.
Consider alternatives for large datasets. JSON isn't optimal for large binary data or extremely long lists. Consider streaming JSON or binary formats when appropriate.
Key Takeaways
- Always double-quote keys and string values
- Never use trailing commas
- Validate before deploying
- Keep nesting shallow and keys meaningful
- Use our JSON Validator to catch errors early
Clean JSON syntax prevents debugging headaches and ensures smooth data exchange across your applications.