Why JSON5 ?

JSON is great for machines. JSON5 is great for humans.

The Problem with JSON

JSON was designed for data interchange between machines. It's strict, minimal, and unambiguous - perfect for APIs and data storage. But when humans need to write and maintain JSON by hand, its strictness becomes a burden.

No Comments

Can't document why a setting exists or what values are valid. Config files become cryptic over time.

Trailing Comma Errors

Copy-paste or reorder items? Hope you remembered to fix the commas. One wrong comma breaks everything.

Verbose Syntax

Every key needs quotes. Simple identifiers like name become "name". Extra typing, extra noise.

No Multi-line Strings

Long text must be on one line or split into arrays. SQL queries, templates, and descriptions become unreadable.

JSON5: The Solution

JSON5 extends JSON with features from ECMAScript 5.1, making it human-friendly while staying machine-readable.

100% backward compatible. Every valid JSON file is already valid JSON5. Adopt features gradually.

Feature Deep Dive

Comments

Document your configuration with single-line (//) and multi-line (/* */) comments. Explain why settings exist, what values are valid, or leave notes for future maintainers.

JSON (no comments)

{ "timeout": 30000, "retries": 3 }

JSON5 (with comments)

{ // Timeout in milliseconds timeout: 30000, /* Retry failed requests up to 3 times */ retries: 3, }

Trailing Commas

Add commas after the last item in arrays and objects. No more hunting for comma errors when you reorder or add items. Cleaner diffs in version control too.

JSON (error!)

{ "features": [ "auth", "api", "dashboard", // Error! ], // Error! }

JSON5 (valid)

{ features: [ 'auth', 'api', 'dashboard', // OK! ], // OK! }

Unquoted Keys

Skip the quotes on object keys that are valid JavaScript identifiers. Less typing, less visual noise, more readable configs.

JSON (quotes required)

{ "name": "my-app", "version": "1.0.0", "private": true }

JSON5 (cleaner)

{ name: 'my-app', version: '1.0.0', private: true, }

Single Quotes

Use single or double quotes for strings. Great when your string contains double quotes - no escaping needed.

JSON (escaping needed)

{ "message": "Say \"Hello World\"" }

JSON5 (no escaping)

{ message: 'Say "Hello World"', }

Extended Number Syntax

Use hexadecimal numbers, leading/trailing decimals, explicit positive signs, and special values like Infinity and NaN.

{ color: 0xFF5733, // Hex color opacity: .5, // Leading decimal offset: +10, // Explicit positive maxSize: Infinity, // Special value invalid: NaN, // Not a number }

Multi-line Strings

Strings can span multiple lines by escaping the newline with a backslash. Great for SQL queries, templates, or any long text.

{ query: 'SELECT * \ FROM users \ WHERE active = true', }

When to Use JSON5

JSON5 excels in human-facing scenarios. Keep using JSON for machine-to-machine data.

Use JSON5 For

  • Configuration files - app settings, build configs, environment settings
  • Data fixtures - test data, seed data, mock responses
  • Localization files - i18n strings with translator notes
  • Design tokens - colors, spacing, typography with documentation

Keep Using JSON For

  • API responses - machine-generated, machine-consumed
  • Database storage - structured data that won't be hand-edited
  • Data interchange - when strict parsing is required
  • Security-critical - when you need guaranteed parsing behavior

Ready to Try JSON5?

Start using JSON5 in your projects today. It's easy to adopt and works with popular tools.