Skip to main content

History and Design Philosophy

Learning Focus

Use this lesson to understand why JSON exists — the context, constraints, and design trade-offs that shaped every rule you will encounter.

What is JSON?

JSON (JavaScript Object Notation) is a lightweight, text-based, language-independent data-interchange format, first coined by Douglas Crockford and standardised as:

StandardYearNotes
RFC 46272006First official Internet Standard
RFC 71592014Clarified edge cases
RFC 82592017Current definitive spec
ECMA-4042013ISO/IEC standardisation

Despite its name, JSON is language-independent and natively supported by virtually every modern programming language.

Historical Context

JSON Evolution Timeline

YearMilestone
2001Douglas Crockford coins "JSON"
2002json.org website launched
2006RFC 4627 — first official Internet Standard
2009Node.js drives explosive adoption
2013JSON Schema Draft 4 published
2014RFC 7159 supersedes RFC 4627
2017RFC 8259 — current definitive spec
2020JSON Schema Draft 2020-12

Design Goals

JSON was designed around four explicit constraints:

GoalMeaningWhy It Matters
SimpleOnly 6 value types, minimal syntaxEasy to implement parsers in any language
UniversalNo language-specific constructsWorks identically in Python, JS, Go, Rust
Human-readablePlain text, consistent structureDebuggable without special tools
Machine-efficientUnambiguous grammarFast to parse; predictable token stream

Deliberately excluded:

  • Comments → kept out to encourage machine-generated JSON
  • Trailing commas → avoids parser ambiguity
  • Functions / undefined / Date objects → language-specific; use string encoding instead

Why JSON Won

  1. Browsers understand it nativelyJSON.parse and JSON.stringify are built into every JS engine
  2. REST APIs defaulted to JSON — lighter than XML-based SOAP
  3. NoSQL databases (MongoDB, CouchDB) adopted JSON-based storage
  4. CLI tooling (jq, fx, gron) made it scriptable at the shell level

Concept Map

Concept Flow

RFC 8259 Spec → 6 Data Types → Objects and Arrays → Nesting → Real-world Payloads → APIs / DBs / Config

Common Pitfalls

PitfallConsequencePrevention
Confusing JSON with a JS objectSingle quotes / undefined break parsersAlways validate with json.loads() or jq
Using JSON for binary dataBase64 bloat, no streamingUse BSON, MessagePack, or Protocol Buffers
Assuming comment supportStrict parsers reject // and /* */Use JSONC (config) or move comments to docs
Treating JSON as a databaseNo transactions, no indexingUse PostgreSQL JSONB or a document DB

Quick Reference

{
"string": "value",
"number": 42,
"float": 3.14,
"boolean": true,
"null": null,
"array": [1, 2, 3],
"object": { "nested": true }
}

What's Next