JSON Glossary
Every term you will meet working with JSON — the grammar, the standards that define it, schemas, JSONPath, encoding, tooling and the failure modes. Where a term is fixed by a specification, the section is named so you can check it.
Nothing matches that term. Try a shorter word, or
tell us what is missing.
#
#$anchorJSON Schema
A named location inside a schema, referenced as
#name. Introduced in 2019-09 to replace the older practice of putting #name in $id.#$defsJSON Schema
The place to put reusable subschemas in 2020-12, renamed from
definitions. Both are recognised by the default meta-schema.also: definitions
#$dynamicRefJSON Schema
A reference resolved at validation time against the dynamic scope, for recursive extension. Powerful and rarely needed; many validators, including ours, do not implement it.
also: $dynamicAnchor
#$idJSON Schema
The base URI of a schema, against which relative references resolve. Changing it mid-document changes how nested
$refs are interpreted.#$refJSON Schema
A reference to another schema, by JSON Pointer, anchor or URI. In draft-07 and earlier,
$ref replaces the whole schema object and every sibling keyword is ignored — a defect in 133 of 646 real schemas. Audit.#$schemaJSON Schema
The keyword declaring which draft a schema is written for. Omitting it forces validators to guess, and different guesses give different results.
A
#additionalPropertiesJSON Schema
Applies to properties not matched by
properties or patternProperties. Setting it to false is the usual way to forbid unknown fields.#Additive changeData modelling
A schema change that existing clients tolerate, such as adding an optional field. The basis of backward-compatible API evolution.
also: backward compatible
#AjvJSON Schema
The most widely used JSON Schema validator for JavaScript, and the usual reference implementation when comparing validator behaviour.
#Allocation churnPerformance
Repeated allocation and collection of short-lived objects. The dominant cost in naive parsers, and what zero-copy techniques avoid.
#AnnotationJSON Schema
A keyword that attaches information without affecting validity —
title, description, default, and by default format.#application/jsonWeb & APIs
The media type for JSON, registered by RFC 8259 §11. No
charset parameter is defined because the encoding is already fixed as UTF-8.also: MIME type, Content-Type
#ApplicatorJSON Schema
A keyword that applies subschemas rather than asserting anything itself —
allOf, anyOf, properties, items. They can only fail through the subschemas they apply.#ArrayJSON grammar
An ordered sequence of values in square brackets, separated by commas. RFC 8259 §5 imposes no requirement that the values share a type.
also: JSON array
#AssertionJSON Schema
A keyword that makes a claim about the instance and can fail —
type, required, minimum, pattern.#Astral planeEncoding & Unicode
Informal name for code points above U+FFFF — emoji, historic scripts, many CJK extensions. The characters most likely to break naive string handling.
also: supplementary plane
#AtomicityPatch & signing
The requirement that a patch applies entirely or not at all. If any operation fails the document is left untouched.
B
#BackpressurePerformance
Slowing a producer when a consumer cannot keep up. Relevant to streaming JSON over a network or into a file.
#base64urlWeb & APIs
A URL-safe base64 variant using
- and _ instead of + and /, with padding usually omitted. The encoding used throughout JWT.#Basic Multilingual PlaneEncoding & Unicode
Unicode code points U+0000 to U+FFFF, each representable as a single
\uXXXX escape. Anything above needs a surrogate pair.also: BMP
#BigintNumbers
An arbitrary-precision integer type. JavaScript's
BigInt cannot be produced by JSON.parse, so libraries such as json-bigint exist to preserve large values.also: arbitrary precision
#Billion laughsSecurity
An entity-expansion attack from XML. JSON has no entities and so is immune, which is one of the reasons it displaced XML for untrusted input.
#BlobTools & processing
A browser object holding binary data outside the JavaScript heap. Formatted output of 180 MB fits in one when it would not fit in a string.
#Breaking changeData modelling
A change that invalidates existing clients — removing a field, renaming a key, tightening a type, or making an optional field required.
#brotliWeb & APIs
A newer compression algorithm supported by all current browsers, saving a further median 17.8% over gzip on minified JSON.
#BSONFormats & dialects
Binary JSON, used by MongoDB. Adds types JSON lacks — dates, binary data, 64-bit integers, ObjectId — at the cost of not being text.
#Byte offsetErrors & parsing
The position of a character counted in bytes from the start of the document. More reliable than a character index for locating an error in a file with multi-byte characters.
also: offset
#Byte order markEncoding & Unicode
U+FEFF at the start of a file. RFC 8259 §8.1 says implementations must not add one and may ignore one. Invisible in editors, which is why it causes errors at position 0 in files that look fine.
also: BOM
C
#Canonical formData modelling
The single agreed representation of data that has several valid encodings. Required before hashing or signing.
#CanonicalizationPatch & signing
Producing an invariant byte sequence for data that has several valid representations, so a hash or signature is reproducible. For JSON this is RFC 8785. Tool.
also: JCS
#CBORFormats & dialects
Concise Binary Object Representation, RFC 8949. A compact binary format modelled on the JSON data model, common in constrained and IoT contexts.
#Chunked readingPerformance
Processing a file in fixed-size pieces. Requires a resumable parser, because a token or a multi-byte character can straddle a chunk boundary.
#ClaimWeb & APIs
A name/value pair in a JWT payload. Registered claims include
iss, sub, aud, exp, iat.#Code pointEncoding & Unicode
A single Unicode character value, written
U+0041. Distinct from a code unit: characters above U+FFFF take two UTF-16 code units.#Code unitEncoding & Unicode
The fixed-size piece an encoding works in — 16 bits for UTF-16, 8 for UTF-8. JavaScript string indexes and lengths are in UTF-16 code units, which is why slicing can split an emoji.
#Cold parsePerformance
The first parse of a document, before any JIT warm-up or cache. The number that matters for a one-shot tool, and often several times slower than a benchmark loop suggests.
#Conformance test suiteTools & processing
A shared set of cases an implementation is scored against, such as the JSON-Schema-Test-Suite or the JSONPath Compliance Test Suite. The only credible basis for a compliance claim.
also: CTS
#Content negotiationWeb & APIs
The HTTP mechanism by which a client states what it can accept and a server chooses a representation. Most 'unexpected token <' errors are a server ignoring it and returning an HTML error page.
#Content sniffingSecurity
A browser guessing a response's type when the header is wrong or missing. Serving JSON with the correct
Content-Type and X-Content-Type-Options: nosniff avoids it.#Content-EncodingWeb & APIs
The HTTP header naming the compression applied to a response — gzip or brotli. Distinct from
contentEncoding in JSON Schema, which describes a string's contents.#Control characterEncoding & Unicode
U+0000 to U+001F. RFC 8259 §7 requires them to be escaped inside a string, which is why a literal newline or tab in a string value is a syntax error.
#CORSWeb & APIs
Cross-Origin Resource Sharing: the browser mechanism that lets a page fetch JSON from another origin. Its absence is a common cause of an empty response body.
#Current node identifierJSONPath
@, meaning the node a filter is currently testing. Distinct from $, which always means the document root even inside a filter.also: @
D
#Decimal stringNumbers
Carrying a number as a quoted string to preserve exact precision, the standard workaround for currency and large identifiers.
#Deep equalityData modelling
Comparing two values by structure and content rather than identity. Object member order must not affect the result — which is why
JSON.stringify comparison is wrong.#Denial of service by nestingSecurity
Deeply nested input exhausting a recursive parser's stack. RFC 8259 §9 permits a depth limit for exactly this reason; classified as CWE-674.
also: CWE-674
#dependentRequiredJSON Schema
Requires certain properties when another is present —
creditCard implies billingAddress. Called dependencies in draft-07.also: dependentSchemas
#DeserializationErrors & parsing
Parsing JSON into language-native objects, usually with type mapping —
Unmarshal in Go, fromJson in Gson, Deserialize in .NET.also: unmarshalling
#Detached signaturePatch & signing
A signature stored separately from the data it covers. Canonicalization is what makes one verifiable for JSON, since the document can be reformatted in transit.
#DigestPatch & signing
The fixed-size output of a hash function over the canonical bytes — SHA-256 and friends. Comparing digests is how you compare documents without transmitting them.
also: hash
#Discriminated arrayData modelling
An array whose elements have different shapes distinguished by a type field. Requires
oneOf per element rather than a single items schema.#DiscriminatorData modelling
A field whose value determines the shape of the rest of the object, such as
type. Modelled with oneOf plus if/then in JSON Schema.also: tagged union
#Discriminator collisionData modelling
Two branches of a
oneOf that both match an instance. JSON Schema requires exactly one to match, so this makes the document invalid rather than ambiguous.#DOM-style parsingErrors & parsing
Building the whole document as an in-memory tree, as
JSON.parse does. Convenient and memory-hungry: a 101 MB file costs about 299 MB of heap.also: tree parsing
#DraftJSON Schema
A version of the JSON Schema specification. draft-07 (2018) is still by far the most used — 92% of the SchemaStore catalogue — with 2020-12 the current release.
#Duplicate key attackSecurity
Exploiting the fact that parsers disagree on which duplicated value wins, so two services reading the same document see different data.
E
#ECMA-262Standards
The ECMAScript language specification. RFC 8785 builds its number and string serialization directly on ECMA-262 rather than defining its own.
also: ECMAScript
#ECMA-404Standards
Ecma International's standard for the JSON syntax, 2nd edition (2017). Defines the same grammar as RFC 8259 using a different formalism; each document normatively references the other.
#ElementJSON grammar
A single value inside an array, addressed by its zero-based index.
#Empty arrayJSON grammar
[] — valid, and giving no information about what element type it would contain, which is why type generators cannot infer one.#Empty objectJSON grammar
{} — valid, and distinct from null and from an absent field. Three different things that are frequently conflated in APIs.#ensure_asciiEncoding & Unicode
The Python
json.dumps option, on by default, that escapes every non-ASCII character to \uXXXX. Set it to False for UTF-8 output.#EnvelopeData modelling
A wrapper object carrying metadata alongside the payload — status, pagination, errors. Common in REST responses.
#Epsilon comparisonNumbers
Comparing floats within a tolerance rather than for exact equality. Necessary whenever JSON numbers have been through a double.
#Error recoveryErrors & parsing
Continuing after a syntax error to report more than the first problem. Useful in editors, misleading in validators — subsequent errors are often artefacts of the first.
#Escape sequenceEncoding & Unicode
A backslash followed by a character, representing something that cannot appear literally. JSON defines exactly eight two-character escapes plus
\uXXXX; there is no \x and no \0.#EscapingTools & processing
Replacing characters with escape sequences so they can appear inside a string. RFC 8259 requires three; everything beyond that is a serializer's choice. Tool.
#ETagWeb & APIs
An HTTP header carrying a version identifier, used with
If-Match for concurrency control. The JSON Patch test operation achieves the same thing inside the payload.#eval()Security
The JavaScript function sometimes misused to parse JSON. RFC 8259 §12 calls it an unacceptable security risk, and it does not handle all valid JSON.
#ExponentNumbers
The
e or E part of a number. 1e2 and 100 are the same value but different literals — canonicalization normalises them, formatting should not.also: scientific notation
#Extra dataErrors & parsing
Content after the end of the first complete value. A JSON text is exactly one value, so two concatenated documents are an error — usually a file appended to rather than overwritten.
F
#Fail fastErrors & parsing
Stopping at the first error rather than continuing. On a 101 MB file it is the difference between an answer in 412 ms and reading 15 MB that cannot matter.
#Filter selectorJSONPath
A predicate applied to each child, written
? followed by a logical expression, e.g. $[?@.age > 40]. Comparisons are strictly typed in RFC 9535.#FlatteningTools & processing
Collapsing nested structure into a single level with compound keys such as
user.address.city. Necessary for CSV, and lossy by definition.#formatJSON Schema
A keyword naming a semantic type such as
email or date-time. By specification an annotation, not an assertion, and implementations validate it to wildly varying degrees — do not rely on it for security.#Function extensionJSONPath
One of the five built-ins RFC 9535 defines:
length(), count(), value(), match(), search(). Arguments are type-checked when the query is parsed.G
#GeoJSONFormats & dialects
RFC 7946: a JSON format for geographic features, with a fixed structure of geometry types and coordinate arrays in longitude, latitude order.
#gzipWeb & APIs
The compression almost every HTTP server applies by default. It removes most of what minifying removes, which is why minifying saves a median 11.6% on an already-gzipped response rather than 36%.
H
#HeapPerformance
Memory a language runtime manages for objects. The constraint that decides how large a document a browser tool can parse.
#HJSONFormats & dialects
A relaxed JSON dialect for human editing, allowing comments, unquoted keys and multiline strings.
I
#I-JSONStandards
Internet JSON, RFC 7493: a restricted profile requiring unique member names, UTF-8, and numbers within the IEEE 754 double range. RFC 8785 canonicalization requires I-JSON input.
also: RFC 7493
#IdempotencyData modelling
The property that repeating an operation changes nothing further. A JSON Merge Patch is idempotent; a JSON Patch with
add on an array index is not.#IEEE 754Standards
The standard for binary floating-point arithmetic. Its binary64 (double) type is what most JSON parsers use for numbers, which is the origin of large-integer precision loss.
also: binary64, double precision
#Integer vs numberNumbers
JSON has one number type. JSON Schema adds an
integer type that matches any number with a zero fractional part, so 1.0 is an integer to a schema validator.J
#jqTools & processing
A command-line JSON processor with its own transformation language. Not JSONPath — different syntax, larger scope.
#JSONJSON grammar
JavaScript Object Notation: a text format for structured data, defined by RFC 8259 and ECMA-404. It has four primitive types (string, number, boolean, null) and two structured types (object, array).
also: JavaScript Object Notation
#JSON FeedFormats & dialects
A JSON alternative to RSS and Atom for syndication.
#JSON injectionSecurity
Building JSON by string concatenation so that attacker-controlled text alters the structure. Serialize with a library instead; the entire class disappears.
#JSON Merge PatchPatch & signing
A patch shaped like the target document, where
null means remove. Simpler than JSON Patch and unable to express roughly one change in ten. Comparison.also: merge patch
#JSON PatchPatch & signing
An array of operations transforming one document into another:
add, remove, replace, move, copy, test. RFC 6902. Tool.#JSON PointerPatch & signing
A string that addresses one value, as in
/users/0/name. Defined by RFC 6901; ~1 escapes a slash and ~0 escapes a tilde.#JSON SchemaJSON Schema
A vocabulary for describing and validating the structure of JSON documents. Published at json-schema.org; the 2020-12 drafts are the current specification of record. Validator.
#JSON Schema dialectFormats & dialects
A specific combination of vocabularies a schema uses, identified by its meta-schema URI in
$schema.#JSON StreamingFormats & dialects
Any convention for sending many JSON values over one connection — NDJSON, length-prefixed records, or concatenated values with a parser that reads one at a time.
#JSON textJSON grammar
A complete JSON document: one value with optional surrounding whitespace. RFC 8259 §2 defines it as
JSON-text = ws value ws, so a bare 42 or "hello" is a valid JSON text.also: JSON document
#JSON-LDFormats & dialects
JSON for Linked Data, a W3C recommendation that adds a
@context mapping keys to IRIs. The format Google reads for structured data.#JSON5Formats & dialects
An extension of JSON adding comments, trailing commas, single quotes, unquoted keys, hex numbers and
NaN. A separate format with its own parsers.#JSONCFormats & dialects
JSON with comments and trailing commas, used by VS Code settings and
tsconfig.json. Not JSON — a standard parser rejects it.also: JSON with comments
#JSONPFormats & dialects
An obsolete technique for cross-origin requests that wrapped JSON in a callback. Superseded by CORS and best avoided — it executes arbitrary script.
#JSONPathJSONPath
A query language for selecting values inside a JSON document, standardised as RFC 9535 in 2024 after two decades of divergent implementations. Tester.
#JWEWeb & APIs
JSON Web Encryption, RFC 7516. Unlike a JWT's signature, this actually conceals the payload.
#JWKWeb & APIs
JSON Web Key, RFC 7517. A JSON representation of a cryptographic key, usually served at a
jwks_uri for signature verification.#JWSWeb & APIs
JSON Web Signature, RFC 7515. The signing mechanism underneath a JWT.
L
#Lazy parsingPerformance
Deferring work until a value is actually accessed, so untouched parts of a document are never materialised.
#Leading zeroNumbers
A zero before another digit, as in
013. Forbidden by RFC 8259 §6 to avoid any suggestion of octal. Zip codes and zero-padded IDs must therefore be strings.#Lenient parsingErrors & parsing
Accepting input the specification forbids — trailing commas, comments, single quotes. Newtonsoft.Json is lenient by default; System.Text.Json is not, which is why .NET migrations surface files that were quietly invalid.
also: permissive parsing
#Line and columnErrors & parsing
A human-readable position derived from the byte offset by counting newlines. In a minified single-line document the column can run into the millions, which is why the byte offset is also reported.
#Literal nameJSON grammar
One of
true, false, null. RFC 8259 §3 requires them to be lowercase, which is why Python's True and None are rejected.#Lone surrogateEncoding & Unicode
A high or low surrogate without its partner, usually from slicing a string on a UTF-16 boundary. RFC 8259 §8.2 calls the behaviour of receiving software unpredictable.
also: unpaired surrogate
M
#Mass assignmentSecurity
Binding a parsed JSON body straight onto a model so a client can set fields it should not. Mitigated by an explicit allowlist, or
additionalProperties: false in a schema.also: over-posting
#MemberJSON grammar
One name/value pair inside an object. The name and value are separated by a colon; members are separated by commas.
also: name/value pair, property
#Merge vs replacePatch & signing
The distinction between updating named fields and substituting a whole value. Merge Patch always merges objects and always replaces arrays, which surprises people editing lists.
#MessagePackFormats & dialects
A binary serialization format with a JSON-like data model, chosen for size and speed over readability.
#Meta-schemaJSON Schema
A schema that describes schemas. Every schema must validate against its own meta-schema, which is how a mistyped keyword can be caught.
#MinificationTools & processing
Removing insignificant whitespace to shrink a document. Saves a median 36% of raw bytes and 11.6% once gzip is applied. Tool.
also: minify
#multipleOfNumbers
The JSON Schema keyword asserting that a number divides evenly by a given value. Floating-point division makes it unreliable for decimals —
0.1 against multipleOf: 0.01 is a classic false negative.#MUST / SHOULD / MAYStandards
Requirement levels defined in RFC 2119 and clarified by RFC 8174, meaningful only in capitals. RFC 8259 says names SHOULD be unique — a recommendation, not a rule, which is why duplicate keys parse.
also: RFC 2119
N
#NDJSONFormats & dialects
Newline-delimited JSON: one complete document per line. Used by log pipelines and streaming exports because each line can be processed independently. Not a single JSON document.
also: JSON Lines, JSONL
#Negative zeroNumbers
-0, distinct from 0 in IEEE 754 and preserved by some parsers but not others. Rarely intended, occasionally load-bearing.#Nesting depthJSON grammar
How many containers enclose the deepest value. The grammar sets no limit, but RFC 8259 §9 explicitly permits an implementation to impose one — unbounded depth from untrusted input is a denial-of-service vector.
also: depth
#NodelistJSONPath
The result of a query: a list of nodes, which may be empty. RFC 9535 does not stipulate the order of results for object wildcards.
#Normalized PathJSONPath
The canonical, unambiguous location of a node, as in
$['users'][0]['name']. Defined in RFC 9535 §2.7 and usable as a query in its own right.#Normative referenceStandards
A referenced document you must follow to conform. RFC 8259 lists ECMA-404 as normative specifically to make clear that the two definitions of JSON do not diverge.
#NosniffSecurity
The
X-Content-Type-Options: nosniff header, which stops a browser guessing a response type. Worth setting on any endpoint returning JSON.#NothingJSONPath
The absence of a value in a JSONPath filter, distinct from
null. Comparing Nothing with anything except Nothing is false.#NullableData modelling
Able to hold
null. Distinct from optional: a nullable field is present with a null value, an optional field may be absent entirely.#NumberNumbers
A base-10 value with an optional minus sign, fraction and exponent. RFC 8259 §6 forbids leading zeros, and permits no
+ prefix, hex, NaN or Infinity.O
#ObjectJSON grammar
An unordered collection of name/value pairs wrapped in curly brackets. A name is always a string. RFC 8259 §4 says names should be unique but does not require it.
also: JSON object
#Object graphPerformance
The in-memory tree a parser builds. For a 101 MB flat document it costs roughly 299 MB; deeply nested data with many small objects can cost five to eight times the text size.
#OpenAPIFormats & dialects
A specification for describing HTTP APIs, written in JSON or YAML. Version 3.1 uses JSON Schema 2020-12 as a proper superset.
also: Swagger
#Optimistic concurrencyPatch & signing
Allowing concurrent edits and detecting conflicts at write time rather than locking. The JSON Patch
test operation and HTTP If-Match both implement it.#Optional fieldData modelling
A member that may be absent. In JSON Schema, any property not listed in
required.#OracleTools & processing
A trusted implementation used to check a new one. Ajv serves as the oracle for our schema engine;
JSON.stringify for the formatter.P
#ParserErrors & parsing
Software that turns JSON text into a representation your language can use. RFC 8259 §9 requires it to accept every text matching the grammar, and permits it to accept extensions or impose limits.
#PATCHWeb & APIs
The HTTP method for partial updates. Its body should be a JSON Patch or JSON Merge Patch with the matching media type, not an arbitrary partial object.
#PayloadWeb & APIs
The body of a request or response. In JWT, specifically the middle segment holding the claims.
#Position reportingErrors & parsing
How a parser describes where a failure occurred: byte offset, line and column, a text snippet, or nothing at all. It varies enormously, which is why the same bug looks different in each language.
#Precision lossNumbers
Silent rounding when a number needs more precision than the parser's type provides. A Snowflake ID
1541815603606036480 becomes 1541815603606036500 in every JavaScript engine. Measured.#prefixItemsJSON Schema
Positional array validation in 2020-12, replacing the array form of
items. Under 2020-12 an array-valued items is simply invalid.#Pretty-printingTools & processing
Adding indentation and newlines for readability. The inverse of minification, and equally lossless. Tool.
also: formatting, beautify
#Prototype pollutionSecurity
An attack where keys such as
__proto__ in parsed JSON modify object prototypes in JavaScript. JSON.parse itself is safe; the danger is in merge and assign helpers applied afterwards.R
#Recursive descentErrors & parsing
A parsing technique that uses the call stack for nesting. Simple and fast, but it means deeply nested input can overflow the stack — the reason many parsers cap depth.
#ReDoSSecurity
Regular-expression denial of service, where a crafted input makes a pattern backtrack exponentially. A real risk anywhere a schema's
pattern comes from an untrusted source.#Relative JSON PointerPatch & signing
An extension addressing a value relative to another, by walking up a number of levels first. Used by JSON Schema's
relative-json-pointer format.#Replacement characterEncoding & Unicode
U+FFFD, substituted when a decoder meets bytes it cannot interpret. Seeing it in parsed output usually means the input was not actually UTF-8.
#RESTWeb & APIs
An architectural style for HTTP APIs. JSON is its usual representation format, though REST specifies no format at all.
#RFC 3339Standards
Date and Time on the Internet. Its
date-time production is the format behind JSON Schema's date-time, date, time and duration formats.#RFC 3629Standards
The definition of UTF-8. RFC 8259 §8.1 requires it for JSON exchanged between systems.
#RFC 3986Standards
The URI generic syntax. Governs how
$id and $ref are resolved in JSON Schema, and the uri format attribute.#RFC 4627Standards
The original 2006 JSON specification by Douglas Crockford, which registered the
application/json media type. Obsoleted twice since.#RFC 6901Standards
JSON Pointer. Defines a string syntax for addressing a single value inside a JSON document, used by JSON Patch and by JSON Schema
$ref fragments.#RFC 6902Standards
JSON Patch. Defines a sequence of operations that transforms one document into another, and the
application/json-patch+json media type. Tool.#RFC 7159Standards
The 2014 revision of the JSON specification, obsoleted by RFC 8259. It was the first to allow any value at the top level rather than only an object or array.
#RFC 7386Standards
JSON Merge Patch. A simpler alternative to JSON Patch where the patch mirrors the target document and
null means remove. Media type application/merge-patch+json.#RFC 8259Standards
The IETF Internet Standard for JSON (STD 90, December 2017, T. Bray Ed.). Obsoletes RFC 7159 and RFC 4627. Defines the grammar and adds interoperability guidance on numbers, encoding and duplicate names.
also: STD 90
#RFC 8785Standards
JSON Canonicalization Scheme (JCS). Defines an invariant serialization for hashing and signing: no whitespace, keys sorted by UTF-16 code unit, ECMAScript number formatting, UTF-8 output. Tool.
also: JCS
#RFC 9485Standards
I-Regexp: an interoperable regular-expression format, used by the
match() and search() functions in RFC 9535.also: I-Regexp
#RFC 9535Standards
JSONPath: Query Expressions for JSON (IETF Standards Track, February 2024). The first standard for JSONPath after twenty years of divergent implementations. Tool.
#RootJSON grammar
The single outermost value of a JSON text. In JSONPath it is written
$.also: root value
#Round tripData modelling
Parsing a document and re-serialising it. A lossless round trip preserves every value; in practice number precision and key order are where it usually fails.
#Round-trip testTools & processing
Verifying a transformation by reversing it and comparing with the original. How the escape and patch tools here are checked — 200,000 and 30,000 randomised cases respectively.
S
#Safe integerNumbers
An integer a double represents exactly: −(2⁵³)+1 to 2⁵³−1, or ±9007199254740991. RFC 8259 §6 calls this range interoperable.
also: MAX_SAFE_INTEGER
#SAX-style parsingErrors & parsing
Event-driven parsing that emits callbacks for each token rather than building a tree. Constant memory, but you must track your own state.
also: event-driven parsing
#ScalarJSON grammar
A value that is not a container: a string, number, boolean or null. Sometimes called a primitive.
also: primitive
#SchemaData modelling
A description of the shape data must take. In JSON usually a JSON Schema document, and distinct from a database schema.
#Schema inferenceTools & processing
Generating a JSON Schema from example documents. Useful as a starting point; it can only describe what the samples happen to contain.
#Schema poisoningSecurity
Supplying a malicious schema rather than malicious data — an unbounded
pattern can cause catastrophic regex backtracking. JSON Schema Validation §10 names this risk.#SchemaStoreJSON Schema
A community catalogue of JSON Schemas for common configuration files — package.json, tsconfig, GitHub Actions, Docker Compose. Apache 2.0. Our registry.
#Secrets in JSONSecurity
Credentials pasted into a tool or committed to a repository. Everything on this site runs locally, but a live token is still worth rotating if it has been pasted anywhere.
#SegmentJSONPath
One step of a JSONPath query. A child segment moves to direct children; a descendant segment (
..) applies to a node and all of its descendants.#SelectorJSONPath
What a segment applies: a name, a wildcard, an index, a slice, or a filter. RFC 9535 allows several in one bracket, as in
$[0, 'name', 2:4].#SerializerErrors & parsing
Software that turns in-memory values into JSON text. RFC 8259 §10 requires the output to conform strictly to the grammar. Also called a generator or encoder.
also: generator, encoder, marshaller
#SIMD parsingPerformance
Using vector instructions to process many bytes per cycle, as simdjson does. Described in Langdale and Lemire, The VLDB Journal 28, 2019.
also: simdjson
#Singular queryJSONPath
A query that can select at most one node — only name and index segments. Only a singular query may be used as a comparable in a filter.
#Slice selectorJSONPath
A Python-style range
[start:end:step] over an array. A step of zero selects nothing; a negative step iterates backwards.#Smart quotesEncoding & Unicode
Typographic quotation marks U+201C and U+201D, inserted by word processors and chat clients. Not string delimiters in JSON, and nearly invisible in most fonts.
also: curly quotes
#Sparse objectData modelling
An object where most possible keys are absent. Usually preferable to filling every key with
null, unless consumers cannot tell absence from null.#Streaming parserErrors & parsing
A parser that processes input incrementally without holding the whole document. Necessary for files larger than available memory. Benchmarked.
also: incremental parser
#Streaming writePerformance
Emitting output progressively rather than building it in memory. What lets a 180 MB formatted result exist in a browser at all.
#Strict parsingErrors & parsing
Rejecting anything the grammar does not permit. The safer default, because leniency means the same file behaves differently in different services.
#Structural characterJSON grammar
One of the six characters that shape a JSON document:
[ ] { } : ,. RFC 8259 §2 permits insignificant whitespace before or after any of them.#Structural diffTools & processing
Comparing two documents by parsed value rather than text, so formatting and key order do not produce false differences. Tool.
#Surrogate pairEncoding & Unicode
Two UTF-16 code units encoding one character above U+FFFF. RFC 8259 §7 gives
"\uD834\uDD1E" for the G clef as the example.#Syntax errorErrors & parsing
A failure to match the grammar. Every parser detects the same set, but each words the message differently — 1,050 distinct strings across 21 parsers in the registry.
#Syntax highlightingTools & processing
Colouring tokens by role. Cheap on a small document and the main cost on a large one — usually the reason a browser tool dies before the parser does.
T
#test operationPatch & signing
The JSON Patch operation that asserts a value before anything is changed. Combined with the atomicity RFC 6902 §5 requires, it gives optimistic concurrency without an ETag.
#Time to first bytePerformance
How quickly a response starts arriving. Streaming JSON improves it; building the whole response before sending does not.
also: TTFB
#TokenJSON grammar
The smallest meaningful unit of a JSON document: a structural character, a string, a number, or a literal name. Comments are not tokens, which is why JSON has none.
#TokenizerErrors & parsing
The stage that splits input into tokens before any structure is checked. Also called a lexer or scanner.
also: lexer, scanner
#TOMLFormats & dialects
A configuration format designed for unambiguous mapping to a hash table. Often chosen over JSON for config because it supports comments.
#Trailing commaJSON grammar
A comma after the last member or element. Valid in JavaScript, invalid in JSON, and the most common cause of a parse failure in hand-edited files. Details.
#Truncated documentErrors & parsing
A document cut short before its closing bracket, usually by a timeout, a proxy, a size-capped log, or a stream read twice. Produces an unexpected-end-of-input error.
U
#U+2028 / U+2029Encoding & Unicode
LINE SEPARATOR and PARAGRAPH SEPARATOR. Legal in JSON, illegal in JavaScript before ES2019 — RFC 8259 §12 names them as the reason
eval() cannot parse all valid JSON.also: line separator
#UnescapingTools & processing
Turning a JSON string literal back into the raw text it represents, resolving
\n, \uXXXX and surrogate pairs.#unevaluatedPropertiesJSON Schema
Constrains properties not already evaluated by any other keyword, including through
allOf and $ref. Requires annotation tracking, which is why many validators implement it incorrectly.also: unevaluatedItems
#UTF-8Encoding & Unicode
The variable-width encoding required by RFC 8259 §8.1 for JSON exchanged between systems. ASCII characters take one byte; other characters take two to four.
V
#ValueJSON grammar
Anything JSON can represent: an object, array, number, string, or one of the three literal names
true, false, null. RFC 8259 §3.#Virtual scrollingTools & processing
Rendering only the rows currently visible. Necessary for large documents, because rendering 100 MB of highlighted text can consume several gigabytes.
#VocabularyJSON Schema
A named group of keywords a meta-schema declares support for, introduced in 2019-09. It lets a dialect state which parts of JSON Schema it uses.
W
#Web WorkerTools & processing
A browser API for running JavaScript off the main thread. What lets a 100 MB file be scanned without freezing the tab.
#Well-formedErrors & parsing
Matching the grammar. Distinct from valid, which in JSON usually means conforming to a schema as well.
#WhitespaceJSON grammar
Space, horizontal tab, line feed or carriage return, allowed between tokens and ignored. No other character counts as whitespace in JSON — a vertical tab or form feed is a syntax error.
also: insignificant whitespace
Y
#YAMLFormats & dialects
A human-friendly data format that is a superset of JSON as of YAML 1.2. Adds anchors, aliases, comments, multi-document files and non-string keys, none of which JSON can represent.
Z
#Zero-copy parsingPerformance
Parsing that references the original buffer rather than copying strings out of it. How high-performance parsers avoid allocation.