{ }jsonkitOpen
Reference

JSON glossary

This JSON glossary defines the terms you meet when you work with JSON, in plain English. It covers syntax and data types, JSON Schema keywords like const, JSONPath, JWT claims like jti, Unix timestamps in seconds and milliseconds, and the APIs that move JSON around. There are 176 terms across 10 topics, and many link to a free tool you can try them in.

176 terms · updated 2026-10-01

JSON core and syntax

The values, structure and grammar rules that make up JSON.

application/json media type#JSON MIME type · content-type application/json
application/json is the official media type (MIME type) for JSON, used in the HTTP Content-Type and Accept headers. It tells the receiver to parse the body as JSON text. RFC 8259 requires UTF-8, so the media type has no charset parameter.MIME Type LookupHTTP Headers Parser
Boolean#true · false
A JSON boolean is one of two literals, true or false, written in lowercase without quotes. The tokens are case-sensitive, so True or FALSE cause a parse error. "true" in quotes is valid, but it is a string, not a boolean.
Comments in JSON#JSON comments
JSON does not allow comments, so both // line comments and /* block */ comments make a document invalid. Douglas Crockford left them out on purpose so parsers could not be misused for directives. To keep notes in data, add a string field such as "_comment", or use a format that allows comments, like JSONC, JSON5 or YAML.JSON5 / JSONC to JSONJSON ValidatorJSON ⇄ YAML
Duplicate keys#repeated keys
Duplicate keys are the same member name appearing more than once in one JSON object, like {"a": 1, "a": 2}. RFC 8259 says keys should be unique but does not forbid repeats, so the result depends on the parser. JavaScript's JSON.parse keeps the last value, while other parsers may keep the first or throw an error.Read more about Duplicate keys →JSON Validator
Escape sequence#escape character
An escape sequence is a backslash followed by a character, used inside a JSON string to write a character that cannot appear as is. JSON defines eight short escapes: \" \\ \/ \b \f \n \r \t. It also has the \uXXXX form for any code point, and a raw newline or unescaped quote inside a string is invalid JSON.JSON Escape / Unescape
Insignificant whitespace#whitespace
Insignificant whitespace is the spaces, tabs, carriage returns and line feeds allowed between JSON tokens, which never change the parsed value. Pretty-printing adds it and minification removes it. RFC 8259 allows only these four characters, and only between tokens, never inside a number or literal.JSON FormatterJSON Minifier
JSON (JavaScript Object Notation)#JSON format
JSON (JavaScript Object Notation) is a text format for storing and exchanging data, built from objects, arrays, strings, numbers, booleans and null. Its syntax comes from JavaScript object literals, but almost every language can read and write it. It is the default format for web APIs, config files and message payloads.JSON FormatterJSON Validator
JSON array#array · list
A JSON array is an ordered list of values inside square brackets, separated by commas, like [1, "two", null]. Elements can mix types, including nested objects and arrays. An array of objects with the same keys is the shape most tools expect when converting JSON to CSV.JSON FormatterJSON to CSV
JSON number#number
A JSON number is a base-10 value with an optional minus sign, fraction and exponent, like -12.5e3. Leading zeros, a leading plus, hex notation, NaN and Infinity are not allowed. JSON has one number type, so whether 3 becomes an integer or a float depends on the language that parses it.
JSON object#object
A JSON object is an unordered set of key/value pairs inside curly braces, like {"name": "Ada", "age": 36}. Each key is a double-quoted string followed by a colon and a value, and pairs are separated by commas. Values can be any JSON type, including nested objects and arrays.JSON FormatterJSON to TypeScript
JSON string#string
A JSON string is a sequence of Unicode characters inside double quotes. Single quotes are not valid. Double quotes, backslashes and control characters such as newline must be escaped with a backslash.JSON Escape / Unescape
Key/value pair (member)#member · name/value pair · property
A key/value pair, called a member in RFC 8259, is one entry in a JSON object: a double-quoted string key, a colon and any JSON value, like "email": "a@b.com". Keys can be any string, so field names with spaces, like "first name", are valid JSON. You read such keys with bracket notation, as in obj["first name"], and keys in one object should be unique.Read more about Key/value pair (member) →
null#JSON null
null is the JSON literal for an empty or unknown value, written in lowercase without quotes. It is different from a missing key, an empty string or 0. Languages map it to None, nil or null, and APIs differ on whether they send null or leave the key out.
RFC 8259#STD 90 · ECMA-404
RFC 8259 is the IETF standard that defines JSON, published in December 2017 as Internet Standard 90 (STD 90). It replaced RFC 7159, which had replaced the original RFC 4627, and it requires UTF-8 for JSON exchanged between systems. ECMA-404 from Ecma International defines the same grammar.JSON Validator
Structural characters#
The structural characters are the six tokens that give JSON its shape: the square brackets, the curly braces, the colon and the comma. Brackets wrap arrays, braces wrap objects, the colon separates a key from its value, and the comma separates items. Whitespace around them is allowed and ignored.JSON FormatterJSON Validator
Trailing comma#dangling comma
A trailing comma is a comma after the last item in a JSON array or object, like [1, 2,] or {"a": 1,}. JSON does not allow it, so strict parsers reject both examples. JavaScript and JSON5 accept trailing commas, which is why they often slip into hand-edited JSON.Read more about Trailing comma →JSON ValidatorJSON RepairJSON5 / JSONC to JSON
Unicode escape sequence#\uXXXX · unicode escape
A Unicode escape writes a character as \u plus four hex digits, like \u00e9 for é, so a JSON string can hold any character using only ASCII. Characters above U+FFFF, such as most emoji, need a surrogate pair of two escapes. A parser turns each escape back into the original character.JSON Escape / Unescape

Data types and structures

How JSON values map to the data types and structures you use in code.

Associative array#hash · hash map
An associative array is a collection that stores values by key instead of by numeric index. A JSON object is an associative array with string keys. Other languages call the same idea a dictionary, hash or hash map.
Compound value#composite value · container value
A compound value is a value made of other values, as opposed to a single scalar. JSON has two compound types, objects and arrays, and they can nest to any depth. A parser recurses into compound values and stops at scalars.
Empty array#
An empty array, written [], is a valid JSON list with zero items. It says the list exists but has no elements, which is different from null or a missing field. Returning [] instead of null lets clients loop over the result without a null check.
Empty object#
An empty object, written {}, is a valid JSON object with no key/value pairs. It says a structure exists but has no fields yet, while null says there is no value at all. It is a common default when you build an object before adding keys.
Flat JSON#flat structure
Flat JSON is data with little or no nesting, where values are mostly strings, numbers, booleans or null. It maps directly to rows and columns, so JSON is usually flattened before it is converted to CSV. Flattening joins nested keys into one path, so address.city becomes a single column header.JSON FlattenerJSON to CSV
Heterogeneous array#mixed-type array
A heterogeneous array holds elements of different types or shapes, like [1, "two", {"three": 3}]. JSON allows this, but it makes typing harder. Schema and type generators usually fall back to a union type, and typed languages may need a wrapper type to hold the values.JSON to TypeScriptJSON Schema Generator
Homogeneous array#
A homogeneous array holds elements that all share one type or shape, such as a list of numbers or a list of objects with the same keys. JSON does not require it. Type and schema generators work best with homogeneous arrays because they can infer one element type.JSON to TypeScriptJSON Schema Generator
Leaf node#leaf
A leaf node is a node with no children, the end of a branch in a tree. In JSON the leaves are the scalar values: strings, numbers, booleans and null. Path queries usually resolve to leaves, and flattening a document lists every leaf with its key path.JSONPath Tester
Map#hash map
A map is a data structure that stores values by key, like JavaScript's Map, Java's HashMap or Go's map. A JSON object corresponds to a map, but JSON.parse returns a plain object, so you convert it with new Map(Object.entries(obj)). A Map can use keys of any type, while JSON keys are always strings.JSON to TypeScript
Nested JSON#deeply nested data · nested data
Nested JSON is JSON with objects or arrays inside other objects or arrays. It lets one document hold related data together, like a user with an address that has a list of phone numbers. Deep nesting makes values harder to reach and flatten, which is why path languages such as JSONPath exist.JSONPath TesterJSON FlattenerJSON to CSV
Ordered collection#sequence
An ordered collection keeps its elements in a fixed sequence. In JSON the array is ordered, and parsers must keep element order. Reordering an array changes the data, while reordering object keys does not.JSON to CSV
Scalar value#atomic value · scalar
A scalar value is a single value that holds one piece of data, not a collection. In JSON the scalars are strings, numbers, booleans and null. Each scalar maps to one cell when you flatten JSON into CSV or database columns.JSON to CSV
Tree structure#hierarchical data · tree
A tree structure is a hierarchy of nodes that starts at one root, where each node has one parent and any number of children. Every JSON document is a tree. Objects and arrays are the branches and scalar values are the leaves, which is how editors render collapsible tree views.JSON FormatterJSONPath Tester
Unordered collection#
An unordered collection identifies elements by key, not by position, so their order has no meaning. RFC 8259 treats a JSON object as unordered, so two objects with the same members in a different order are equal. Most parsers keep insertion order anyway, but code should not rely on it, and diff tools usually ignore key order.JSON Diff / Compare

JSON dialects and variants

Formats built on JSON, plus binary formats that trade readable text for size and speed.

Amazon Ion#Ion
Amazon Ion is a data format from Amazon with a text encoding and a binary encoding of the same data model. Its text form is a superset of JSON, so any JSON document is valid Ion. Ion adds types JSON lacks, such as timestamps, arbitrary-precision decimals, symbols, blobs and type annotations.
BSON#Binary JSON
BSON (Binary JSON) is the binary format MongoDB uses to store documents and send data. It adds types JSON lacks, such as dates, 64-bit integers, decimal128, binary data and ObjectIds. Each element carries length information for fast scanning, so BSON is often larger than the same data as JSON text.
Canonical JSON#Deterministic JSON · JCS
Canonical JSON is a way to serialize data so equal values always produce the same bytes. The rules usually fix key order, remove whitespace and normalize numbers and string escapes. The JSON Canonicalization Scheme (JCS, RFC 8785) is the IETF standard, used when you hash, sign or compare JSON.JSON SorterJSON Diff / Compare
CBOR#Concise Binary Object Representation
CBOR (Concise Binary Object Representation) is a binary data format defined in RFC 8949, based on the JSON data model. It needs no schema, supports streaming, and uses tags for extra types such as dates and big numbers. COSE, CWT and WebAuthn all use CBOR.
GeoJSON#
GeoJSON is a JSON format for geographic data such as points, lines and polygons, standardized as RFC 7946. Each feature has a geometry and a properties object. Coordinates are listed as longitude then latitude in WGS84, and most mapping libraries read GeoJSON directly.JSON Validator
HAL#Hypertext Application Language
HAL (Hypertext Application Language) is a convention for adding links to JSON API responses. Links go under a reserved _links object and related resources under _embedded, each named by a relation. Clients follow these links instead of hardcoding endpoint paths.JSONPath Tester
Hjson#Human JSON
Hjson (Human JSON) is a JSON syntax extension for config files that people edit by hand. It allows comments and multi-line strings, and makes quotes and commas optional. Tools parse Hjson and output standard JSON for programs to read.JSON Formatter
JSON Text Sequences#json-seq · RFC 7464
JSON Text Sequences is a format, defined in RFC 7464 with the media type application/json-seq, for a stream of JSON values that each start with the ASCII record separator character (U+001E) and end with a newline. The leading separator lets a reader recover after a truncated or broken record, which NDJSON cannot do. It is meant for logs and streams that append values over time.
JSON-LD#JSON for Linked Data
JSON-LD (JSON for Linked Data) is a W3C standard for describing linked data in plain JSON. A @context maps keys to global identifiers called IRIs, so their meaning is clear across systems. Search engines read schema.org markup written in JSON-LD to show rich results.JSON Validator
JSON:API#JSON API
JSON:API is a specification for how JSON APIs shape their requests and responses. It defines a top-level data member, resource objects with a type and id, relationships, included resources, pagination, filtering and sparse fieldsets. It uses the media type application/vnd.api+json, so shared client libraries work with any compliant API.JSONPath Tester
JSON5#
JSON5 is a superset of JSON for hand-written config files. It allows comments, trailing commas, single quotes, unquoted keys, hex numbers, leading or trailing decimal points and multi-line strings. Standard JSON parsers reject JSON5, so it needs its own parser and is usually converted to plain JSON before use.JSON5 / JSONC to JSONJSON Validator
JSONC#JSON with Comments
JSONC (JSON with Comments) is JSON that also allows // line comments and /* */ block comments. VS Code uses it for its settings files, and it often accepts trailing commas too. JSON.parse rejects comments, so JSONC needs a lenient parser or must have its comments stripped first.JSON5 / JSONC to JSONJSON Minifier
JSONP#JSON with Padding
JSONP (JSON with Padding) is an old technique for loading data from another origin by wrapping JSON in a function call and loading it with a script tag. Script tags are not limited by the same-origin policy, so the browser runs the response as code. CORS (Cross-Origin Resource Sharing) has replaced it, and JSONP is unsafe because the page executes whatever the server returns.
MessagePack#msgpack
MessagePack is a binary serialization format with the same data model as JSON but a much smaller encoding. Small integers and short strings fit in one or a few bytes, and it supports raw binary and extension types. It is used for caching, messaging and APIs where size matters more than readability.JSON Minifier
MongoDB Extended JSON#Extended JSON · EJSON
MongoDB Extended JSON (EJSON) is a way to write BSON types in plain JSON text so they survive tools that only understand JSON. Types JSON lacks, such as dates, ObjectIds and 64-bit integers, are wrapped in reserved keys like {"$oid": ...} or {"$date": ...}. It has relaxed and canonical modes, and mongoexport and mongoimport read and write it.JSON Validator
NDJSON#JSON Lines · JSONL
NDJSON (newline-delimited JSON), also called JSON Lines or JSONL, stores one JSON value per line. Each line can be parsed on its own, so large files and streams never have to be loaded at once. The file as a whole is not valid JSON, which lets producers append records.Read more about NDJSON →JSON ⇄ JSONLJSON to CSV
TopoJSON#
TopoJSON is an extension of GeoJSON that stores shared borders, called arcs, once instead of repeating coordinates for each shape. This removes duplication and can make map files much smaller. It also supports quantized integer coordinates, and clients usually convert it back to GeoJSON before drawing.
UBJSON#Universal Binary JSON
UBJSON (Universal Binary JSON) is a binary format that mirrors the JSON data model exactly. Each value starts with a one-byte type marker. Its only additions are explicit integer widths and a byte type, so UBJSON converts to and from JSON without loss.

Schema and validation

How to describe the shape of JSON and validate documents against it.

$defs keyword#
$defs is the JSON Schema keyword for storing reusable subschemas that other parts of the schema reference with $ref. It does no validation by itself and replaced the older definitions keyword. It also makes recursive shapes easy, like a tree node that references itself through #/$defs/node.JSON Schema Generator
$id keyword#
The $id keyword gives a JSON Schema or subschema a base URI that other schemas can point to with $ref. Relative references inside it resolve against that URI. A stable $id lets you register, cache and share schemas across files.JSON Schema Generator
$ref keyword#reference · JSON reference
The $ref keyword points to another schema by URI or JSON Pointer, such as #/$defs/address, and validates the value against it. It lets you define a shape once and reuse it. It also lets you split a schema across files or describe recursive data.JSON Schema Generator
$schema keyword#
The $schema keyword declares which JSON Schema draft a schema uses, as a URI such as https://json-schema.org/draft/2020-12/schema. Validators read it to decide which keywords and rules apply. Without it, many validators fall back to a default draft without warning.JSON Validator
additionalProperties keyword#
The additionalProperties keyword controls whether a JSON object may have keys that are not listed in properties or patternProperties. Set it to false to reject unknown keys, or to a schema to constrain their values. It is the usual way to catch typos and unexpected fields in API request bodies.JSON Validator
Conditional subschemas (if/then/else)#if/then/else
The if, then and else keywords add conditional validation to JSON Schema. If a value matches the if schema it must also match then, and otherwise it must match else. For example, a schema can require routingNumber only when "method" is "bank", and the keywords have existed since Draft 7.JSON Validator
const keyword#JSON Schema const · JSON Schema constant
The const keyword in JSON Schema requires a value to equal one fixed constant, such as "const": "invoice". The constant can be any JSON type, and objects or arrays must match exactly, including nested values. It works like a one-item enum and is often used to pin a discriminator field like "type" in a tagged union.Read more about const keyword →JSON Schema GeneratorJSON Validator
enum keyword#
The enum keyword limits a value to a fixed list of allowed options, such as ["draft", "published", "archived"]. The value must exactly equal one entry, and entries can be any JSON type, not only strings. Use const instead when only one value is allowed.JSON Schema GeneratorJSON to TypeScript
format keyword#
The format keyword names a known string format such as email, uri, date-time, uuid or ipv4. Validators differ here. Some treat format only as an annotation and some enforce it, depending on the tool and its settings, and custom formats need the pattern keyword.JSON Validator
items keyword#
The items keyword sets the schema every array element must match, such as an array of integers. Since Draft 2020-12, prefixItems describes fixed positions at the start of an array, and items applies only to the elements after them. minItems, maxItems and uniqueItems control size and uniqueness.JSON Schema Generator
JSON Schema#
JSON Schema is a vocabulary, written in JSON, for describing the structure, types and constraints a JSON document must follow. A validator checks a document against the schema and reports every mismatch. Teams use it to validate API payloads and config files, generate forms and write documentation.Read more about JSON Schema →JSON Schema ValidatorJSON Schema GeneratorMock JSON Data Generator
JSON Schema Draft 2020-12#Draft 2020-12 · 2020-12 dialect
Draft 2020-12 is the latest published version of the JSON Schema specification, released in December 2020. It replaced the items and additionalItems array handling with prefixItems and items, and replaced $recursiveRef with $dynamicRef and $dynamicAnchor. Drafts are not always backward compatible, so declare the draft with the $schema keyword.JSON Schema GeneratorJSON Validator
Meta-schema#
A meta-schema is a JSON Schema that describes what valid schemas look like, so a schema can be validated like any other document. Each draft publishes a meta-schema at a stable URI, and the $schema keyword points to it. Validators use it to catch misspelled keywords and values of the wrong type.JSON ValidatorJSON Schema Generator
minimum and maximum keywords#
The minimum and maximum keywords set inclusive bounds on a number, and exclusiveMinimum and exclusiveMaximum set strict bounds. minLength and maxLength do the same for string length, and minItems and maxItems for array size. They catch values like a negative age or an oversized list before they reach your code.JSON Validator
pattern keyword#
The pattern keyword requires a string to match a regular expression, such as ^[A-Z]{2}\d{4}$ for a product code. The match is unanchored unless you add ^ and $, and JSON Schema uses ECMAScript regex syntax. It covers formats the format keyword does not, like custom IDs, URL slugs or local phone numbers.JSON Validator
patternProperties keyword#
The patternProperties keyword applies a subschema to every object key that matches a regular expression. It validates objects with dynamic keys, such as IDs that must each map to a number. Keys matched by neither properties nor patternProperties are then handled by additionalProperties.JSON Schema GeneratorJSON Validator
properties keyword#
The properties keyword maps object keys to the schemas their values must match. It only checks keys that are present and does not make any key mandatory, which is the job of required. Unlisted keys are allowed unless additionalProperties forbids them.JSON Schema Generator
required keyword#
The required keyword lists the keys a JSON object must contain, as an array of strings like ["id", "email"]. It only checks that each key is present. The type and format of each value come from properties, and a missing key produces a validation error.JSON Validator
Schema composition (oneOf, anyOf, allOf, not)#combinators · applicator keywords
oneOf, anyOf, allOf and not combine subschemas with boolean logic in JSON Schema. allOf requires every subschema to match, anyOf at least one and oneOf exactly one, while not requires its subschema to fail. If oneOf branches overlap, a value can match two of them and fail, which is a common source of confusing errors.JSON ValidatorJSON Schema Generator
Schema inference#schema generation · type inference
Schema inference generates a schema or type definition from example JSON instead of writing it by hand. The tool reads each value to guess its type, marks fields that are sometimes missing as optional, and merges different shapes into unions. The output, such as JSON Schema or a TypeScript interface, usually needs edits because samples rarely cover every case.JSON Schema GeneratorJSON to TypeScript
Schema validation error#validation error
A schema validation error is the message a validator returns when a JSON document breaks a schema rule. It usually names the failing keyword, gives the location in the document as a JSON Pointer, and includes a readable message. A parse error means the JSON is malformed, while a validation error means it is valid JSON with the wrong shape.JSON Validator
type keyword#
The type keyword limits a value to one JSON Schema type: string, number, integer, boolean, object, array or null. integer exists only in JSON Schema, since JSON itself has one number type. Pass an array such as ["string", "null"] to allow more than one type, for example a nullable string.JSON Schema GeneratorJSON to TypeScript
unevaluatedProperties keyword#
The unevaluatedProperties keyword applies to object keys that no other keyword has checked, including keys checked inside allOf, anyOf or oneOf. additionalProperties cannot see into those subschemas, so unevaluatedProperties is the way to forbid extra keys in a schema built by composition. It was added in Draft 2019-09, and unevaluatedItems does the same for arrays.JSON Validator

Querying and transformation

How to address, extract and patch values inside a JSON document.

Array slice#slice · array slicing
An array slice selects a range of elements using start, end and optional step values, a syntax borrowed from Python. In JSONPath, $.items[0:3] returns the first three items, [-2:] the last two, and [::2] every second one. The end index is excluded, and negative numbers count from the end.JSONPath Tester
Dot notation vs bracket notation#dot notation · bracket notation
Dot notation and bracket notation are the two ways to step into a key in a path expression. Dot notation, like $.user.name, is short but only works when the key is a plain identifier. Bracket notation, like $['user']['first name'], works for any key, including keys with spaces or hyphens, and also holds array indexes like [0].JSONPath Tester
Filter expression#filter · predicate
A filter expression selects array elements that match a condition instead of selecting them by position. In JSONPath it looks like $.books[?(@.price < 10)], where @ is the element being tested. JMESPath uses [?expr] filters, and jq uses select().JSONPath Tester
JMESPath#
JMESPath is a query language for extracting and reshaping data from JSON. It supports keys, indexes, wildcards, slices, projections, filters, functions and pipes. It has a formal grammar and a shared test suite, so implementations agree, and the AWS CLI uses it for its --query option.JMESPath Tester
jq#
jq is a command-line tool and language for filtering and transforming JSON. Filters are joined with a pipe (|), so each stage feeds the next, as in jq '.items[] | .name'. It is common in shell scripts and CI pipelines for reshaping API responses.Read more about jq →jq TesterJSONPath Tester
JSON Merge Patch (RFC 7386)#RFC 7386 · Merge Patch
JSON Merge Patch (RFC 7386) is a format where the patch is a partial JSON document that gets merged into the target. Keys in the patch overwrite or merge into the target, and a key set to null deletes it. It cannot set a value to null or change a single array element, and its media type is application/merge-patch+json.JSON Patch / Merge PatchJSON Diff / Compare
JSON Patch (RFC 6902)#RFC 6902
JSON Patch (RFC 6902) is a format that describes changes to a JSON document as an array of operations, like {"op": "replace", "path": "/name", "value": "Ada"}. Each operation has an op, which is add, remove, replace, move, copy or test, and a JSON Pointer path. It is sent with HTTP PATCH and the media type application/json-patch+json, and the test operation can guard against concurrent edits.Read more about JSON Patch (RFC 6902) →JSON Patch / Merge PatchJSON Diff / Compare
JSON Pointer (RFC 6901)#RFC 6901 · JSON Pointer
A JSON Pointer (RFC 6901) is a string that identifies one value in a JSON document, like /users/0/name. Each slash-separated token is an object key or an array index, and a ~ or / inside a key is written as ~0 or ~1. JSON Patch, the $ref keyword and validation errors all use pointers.Read more about JSON Pointer (RFC 6901) →JSONPath Tester
JSONata#
JSONata is a query and transformation language for JSON, inspired by XPath 3.1. Besides paths, wildcards and predicates, it has arithmetic, string and aggregate functions, conditionals, variables and user-defined functions. One expression can turn an input document into a completely different shape, and it is common in integration and low-code tools.
JSONPath#RFC 9535
JSONPath is a query language that selects values from a JSON document with path expressions like $.store.book[0].title. A query starts at the root ($) and uses dot or bracket steps, wildcards, filters and recursive descent. Stefan Goessner proposed it in 2007, and RFC 9535 standardized it in 2024.Read more about JSONPath →JSONPath Tester
Projection#
A projection applies an expression to every element of a collection and collects the results into a new list. In JMESPath, people[*].name returns every person's name, and multiselect syntax can build a new object for each item. It is similar to a SQL SELECT column list or jq's map.JMESPath TesterJSON to CSV
Recursive descent#deep scan · ..
Recursive descent is the JSONPath operator .. that searches every level of a document instead of one. $..author finds every author key anywhere in the tree. It helps with irregular data, but it can be slow on large documents and may match more than you expect.JSONPath Tester
Root node identifier ($)#$ · root selector
The root node identifier is the dollar sign ($) that starts a JSONPath expression and stands for the whole document. $.store.book[0] goes from the root into store, then book, then the first element. Inside filters, @ refers to the current element, while jq uses a leading dot for the root and JMESPath has no root symbol.JSONPath Tester
SQL/JSON#
SQL/JSON is the part of the SQL standard, added in SQL:2016, for storing, querying and generating JSON in relational databases. It includes JSONPath-style path expressions, JSON_EXISTS, JSON_VALUE, JSON_QUERY and JSON_TABLE, which turns JSON into rows and columns. PostgreSQL, Oracle and SQL Server each implement parts of it.JSONPath Tester
Structural diff#JSON diff · semantic diff
A structural diff compares two JSON documents by their parsed values instead of their text. It reports added, removed and changed values by path, and ignores whitespace and usually key order. That avoids the noise of a line-based diff, and the result can be turned into a JSON Patch.JSON Diff / Compare
Wildcard#wildcard selector · *
A wildcard (*) is a path selector that matches every child at one level instead of one key or index. In JSONPath, $.items[*].price returns the price of each item, and $.* returns all top-level values. It returns a list of matches, so it is the usual way to query arrays of unknown length.JSONPath Tester

Serialization and processing

How data becomes JSON text and back again: parsing, stringifying and the steps in between.

Deserialization#Decoding
Deserialization turns serialized data, such as JSON text, back into in-memory objects, arrays and values. JSON.parse in JavaScript and json.loads in Python both deserialize JSON. Validate untrusted input against a schema before your code uses the result.JSON Validator
JSON parser#Parser
A JSON parser is code that reads JSON text and turns it into in-memory values or a stream of events. A conforming parser accepts every valid RFC 8259 document and rejects malformed input. Strict parsers also reject extras such as comments and trailing commas.JSON ValidatorJSON Formatter
JSON.parse#
JSON.parse is the built-in JavaScript method that converts a JSON string into a JavaScript value. It throws a SyntaxError if the text is not valid JSON, so wrap untrusted input in try/catch. An optional reviver function can transform each key/value pair, for example to turn ISO 8601 strings into Date objects.JSON Validator
JSON.stringify#stringify
JSON.stringify is the built-in JavaScript method that converts a value into a JSON string. Its optional replacer filters or changes values, and its space argument sets indentation, as in JSON.stringify(data, null, 2). Functions, undefined and symbols are dropped from objects and become null in arrays, and an object with a toJSON method is serialized from that method's return value.JSON FormatterJSON Minifier
Marshalling / Unmarshalling#Marshaling · Unmarshaling
Marshalling is another word for serialization, turning an in-memory object into a format for storage or transfer, and unmarshalling is the reverse. The terms are common in Go, Java and RPC (remote procedure call) systems. Go's encoding/json has Marshal and Unmarshal functions that use struct tags to map field names.JSON to GoJSON to TypeScript
Minification#Minify · Compact JSON
Minification removes all insignificant whitespace from JSON to produce the smallest valid text. The parsed data is the same as the pretty-printed version. APIs usually send minified JSON to save bytes, and JSON.stringify without a space argument outputs it by default.JSON MinifierJSON Formatter
Parsing#
Parsing is reading JSON text by the RFC 8259 grammar and turning it into a structured, in-memory value. The parser splits the characters into tokens and checks that braces, brackets, commas, colons and quotes form a valid document. Invalid input produces a syntax error, usually with a line and column.JSON ValidatorJSON Formatter
Pretty-print / Beautify#Beautify · Prettify · Format
Pretty-printing, or beautifying, reformats JSON with indentation and line breaks so people can read its structure. Only the whitespace between tokens changes, never the data. In JavaScript, JSON.stringify(value, null, 2) indents with two spaces, and pretty-printed JSON gives cleaner diffs in version control.JSON Formatter
Replacer function#replacer
A replacer is the optional second argument to JSON.stringify that controls what gets serialized. As a function, it runs for every key/value pair and its return value is written out, and returning undefined drops the key. As an array of strings, it serializes only the listed keys, which helps strip secrets or shrink payloads.JSON Formatter
Reviver function#reviver
A reviver is the optional second argument to JSON.parse, a function called for every key/value pair as the result is built. It runs from the innermost values outward, its return value replaces the original, and returning undefined deletes the key. Common uses are turning ISO 8601 strings into Date objects or numeric strings into BigInt.
Round-trip fidelity#Round-tripping · Lossless round-trip
Round-trip fidelity is whether data comes back unchanged after you serialize it and parse it again. JSON does not keep whitespace or guarantee key order, and integers above 2^53 can lose precision as IEEE 754 doubles. Date objects come back as strings and JSON.stringify throws on BigInt, which matters when you compare, hash or sign JSON.JSON Diff / Compare
Serialization#Serializing · Encoding
Serialization converts an in-memory data structure, such as an object, array or map, into text or bytes that can be stored or sent. For JSON it means producing JSON text, as JSON.stringify in JavaScript or json_encode in PHP do. Any platform with a JSON parser can then rebuild the data.JSON FormatterJSON Minifier
Streaming parser (SAX-style)#SAX parsing · Event-based parsing
A streaming parser reads JSON piece by piece and emits events, such as start of object, key, value and end of array, without loading the whole document into memory. It follows the SAX (Simple API for XML) model and suits files or network streams too large for memory. The cost is more complex, callback-driven code than a single JSON.parse call.
String escaping#Escape · Unescape
String escaping replaces characters that cannot appear raw in a JSON string with backslash sequences. A double quote becomes \", a backslash becomes \\, and a newline or tab becomes \n or \t, while any character can be written as \uXXXX. You need it when you embed one JSON document inside another as a string, and unescaping turns the sequences back into the original text.JSON Escape / Unescape
Tokenizer / Lexer#Lexer · Scanner · Lexical analysis
A tokenizer, or lexer, is the first stage of a parser, which groups raw JSON characters into tokens. Tokens are strings, numbers, punctuation and the literals true, false and null. The parser then checks the order of those tokens, and keeping the two stages apart makes it easier to report errors at exact positions.JSON Validator

Web APIs and data exchange

How JSON moves between clients and servers over HTTP.

Accept header#Accept
The Accept header tells the server which response formats the client can handle, for example Accept: application/json. The server uses it to choose a format, so one endpoint can return JSON, XML or something else. This process is called content negotiation.HTTP Headers Parser
API#Application Programming Interface
An API (application programming interface) is a defined contract that lets one program request data or actions from another. Most web APIs send and receive JSON because it is light, language-neutral and quick to parse. A stable API lets web apps, mobile apps and third parties use the same backend.Mock JSON Data Generator
Content negotiation#conneg
Content negotiation is how a client and server agree on the format of a response. The client states its preferences in headers such as Accept and Accept-Language. The server picks a matching format and confirms it in the Content-Type header, so one URL can serve JSON to one client and XML or HTML to another.JSON ⇄ XML
Content-Type header#Content-Type · media type header
The Content-Type header states the media type of a message body so the receiver knows how to parse it. For JSON the value is application/json. Sending the wrong Content-Type is a common bug that makes a server ignore the JSON body or reject the request with 415 Unsupported Media Type.HTTP Headers ParserMIME Type Lookup
CORS#Cross-Origin Resource Sharing
CORS (Cross-Origin Resource Sharing) is the browser mechanism that decides whether a page on one origin can call an API on another origin. The server allows it by returning headers such as Access-Control-Allow-Origin, and the browser may send a preflight OPTIONS request first. That is why a fetch can fail in the browser but work from curl or a server.
Endpoint#API endpoint · route
An endpoint is a URL where an API exposes a resource or action, such as /users/42 or /orders. Clients send HTTP requests to it and usually get JSON back. Each endpoint accepts certain HTTP methods, like GET or POST.
ETag#
An ETag (entity tag) is a response header that identifies one version of a resource, often a hash of its content. Clients send it back in If-None-Match to check a cache and get 304 Not Modified if nothing changed. Sent in If-Match, it makes a write fail with 412 Precondition Failed if someone else changed the resource first.
GraphQL#
GraphQL is a query language and runtime for APIs where the client asks for exactly the fields it needs in one request. Requests usually go to a single endpoint, and responses are JSON shaped like the query. It avoids over-fetching and under-fetching, and a typed schema describes the whole API.JSON to TypeScript
gRPC#
gRPC is a remote procedure call framework from Google that runs over HTTP/2 and encodes messages with Protocol Buffers instead of JSON. Its binary encoding and two-way streaming make it common between internal services. gRPC-Web and JSON transcoding let browsers and REST clients call gRPC services with JSON.
HATEOAS#Hypermedia as the Engine of Application State · hypermedia
HATEOAS (Hypermedia as the Engine of Application State) is a REST constraint where responses include links to the actions and resources available next. An order response might include links to pay or cancel it, so the client does not hardcode URLs. Few APIs implement it fully.
HTTP method#HTTP verb · request method
An HTTP method, or verb, states what a request wants to do with a resource. GET reads, POST creates, PUT and PATCH update, and DELETE removes. JSON usually goes in the body of POST, PUT and PATCH requests, and using the right method lets caches and proxies behave correctly.
HTTP status code#response code · status code
An HTTP status code is the three-digit number a server returns to describe the result of a request. 2xx means success, 3xx a redirect, 4xx a client error like 404 Not Found, and 5xx a server error. JSON APIs often add an error body with details, such as which field failed validation.
Idempotency key#
An idempotency key is a unique token, often a UUID, that the client sends in a request header so the server can ignore duplicate retries. It matters for requests like a POST that charges a card, where a network retry could otherwise charge twice. The server stores the key with its first response and returns that same response for later requests with the same key.UUID / NanoID Generator
JSON-RPC#JSON Remote Procedure Call
JSON-RPC is a lightweight protocol for calling named methods on a remote server with JSON messages. A request has a method, params and an id, and the response returns the same id. It is action-based rather than resource-based like REST, and blockchain nodes such as Ethereum clients expose JSON-RPC APIs.JSON Formatter
OpenAPI (Swagger)#Swagger · OpenAPI Specification · OAS
OpenAPI, formerly Swagger, is a specification for describing a REST API in one JSON or YAML file. The file lists endpoints, parameters, request and response schemas, and authentication. Tools use it to generate docs, client SDKs and mock servers, and its schemas are based on JSON Schema.OpenAPI ValidatorJSON Schema Generator
Payload#request body · response body · message body
A payload is the data in the body of an HTTP request or response, as opposed to the headers. In a JSON API it is the JSON document, such as the object a client POSTs or the array a server returns. Smaller payloads transfer and parse faster, and minifying JSON removes bytes you do not need.JSON Size AnalyzerJSON MinifierJSON Formatter
Problem Details#application/problem+json · RFC 9457
Problem Details is a standard JSON format for HTTP API errors, defined in RFC 9457 and sent as application/problem+json. It uses the members type, title, status, detail and instance, plus any custom fields, so clients can handle errors the same way across APIs. RFC 9457 replaced RFC 7807.
Rate limiting#
Rate limiting caps how many requests a client can make in a time window. Servers usually reject extra calls with 429 Too Many Requests and a JSON error body, and send headers such as Retry-After. Clients should back off and retry, ideally with exponential backoff and jitter.
REST API#RESTful API · REST
A REST API is a web API that models data as resources at URLs and changes them with standard HTTP methods. Responses are usually JSON, and each request carries all the context it needs, with no session on the server. REST fits HTTP well and is easy to cache.JSON Formatter
Server-Sent Events#SSE
Server-Sent Events (SSE) is a browser standard that lets a server push a one-way stream of text events over one long-lived HTTP connection. The browser reads it with the EventSource API, and apps usually put JSON in each event's data field. It suits live feeds like notifications or streamed AI responses, and is simpler than WebSockets when only the server sends updates.
Webhook#HTTP callback · reverse API
A webhook is an HTTP request a service sends to a URL you register when an event happens, so you do not have to poll. The event data usually arrives as a JSON payload. Payment providers and CI systems use webhooks, and receivers should verify the signature header to confirm the sender.Mock JSON Data Generator

Encoding, numbers and dates

Character encoding, number precision and dates in JSON. These details cause many parsing bugs.

Base64#base-64
Base64 is an encoding that turns binary data into text using 64 ASCII characters: A to Z, a to z, 0 to 9, + and /, with = for padding. JSON has no binary type, so images, files and keys are stored in JSON as base64 strings. The encoded text is about 33% larger than the original bytes.Base64 Encode / DecodeData URI Encoder / Decoder
Base64url#base64url encoding · URL-safe base64
Base64url is a URL-safe variant of base64 that uses - and _ instead of + and /, and usually drops the = padding. The output works in URLs and filenames without escaping. JWTs encode their header, payload and signature with base64url, and some decoders need the padding added back first.Read more about Base64url →Base64 Encode / DecodeJWT Decoder
Byte Order Mark#BOM · U+FEFF
A byte order mark (BOM) is the character U+FEFF placed at the start of a text file to signal its encoding. RFC 8259 says JSON must not start with a BOM, though parsers may ignore one. A stray UTF-8 BOM (bytes EF BB BF) often causes an unexpected token error at the first character.Unicode & Encoding InspectorJSON Validator
IEEE 754 double-precision#IEEE 754 · double · binary64
IEEE 754 double precision is the 64-bit floating-point format most JSON parsers use for numbers. It has 1 sign bit, 11 exponent bits and 52 fraction bits, and holds about 15 to 17 significant digits. Decimals like 0.1 cannot be stored exactly, so 0.1 + 0.2 gives 0.30000000000000004.JSON Validator
Integer precision loss#big integer problem · number precision loss
Integer precision loss happens when a JSON integer is larger than 2^53 minus 1, the largest integer a double can store exactly (Number.MAX_SAFE_INTEGER in JavaScript). Larger values, such as big database IDs or Twitter snowflake IDs, silently round to a nearby number. JSON allows integers of any size, so send big numbers as strings and parse them with BigInt or a big-number library.JSON ValidatorJSON to TypeScript
ISO 8601 date string#ISO 8601 · RFC 3339 timestamp
An ISO 8601 date string is the standard text format for dates and times, like 2026-07-12T14:30:00Z, where Z means UTC. JSON has no date type, so this is the most common way to store timestamps in JSON, and JSON Schema's date-time format checks the RFC 3339 profile of it. Strings in this format sort in time order as long as they use the same offset.Timestamp ConverterJSON Schema Generator
Line separator characters#
U+2028 (line separator) and U+2029 (paragraph separator) are Unicode characters that JSON allows unescaped inside strings. Before ECMAScript 2019 they were invalid in JavaScript string literals, so JSON pasted into a script could throw a syntax error. Serializers often escape them as \u2028 and \u2029, which is still a good habit when you put JSON into HTML or JavaScript.JSON Escape / Unescape
NaN and Infinity#not a number · non-finite numbers
NaN and Infinity are IEEE 754 number values that JSON cannot represent. RFC 8259 has no syntax for them, so standard parsers reject them. JSON.stringify writes them as null, and other serializers may throw an error or use non-standard tokens.JSON Validator
No native date type#JSON has no date type
JSON has no date type, only strings, numbers, booleans, null, objects and arrays. Dates are stored by convention, usually as an ISO 8601 string or a Unix timestamp number, and both sides must agree on the format and time zone. A parser cannot tell a date string from any other string, so your code has to convert it.JSON Schema GeneratorJSON to TypeScript
Number canonicalization#canonical number form · number normalization
Number canonicalization rewrites numbers in one standard text form so equal values always serialize the same way. JSON allows many spellings of one value, such as 1, 1.0 and 1e0. A single form matters for hashing, signatures and diffs, where the bytes must match.JSON Diff / CompareJSON Formatter
Percent encoding#URL encoding · percent-encoding
Percent encoding, also called URL encoding, writes reserved or non-ASCII characters in a URL as % followed by two hex digits, so a space becomes %20. In form data a space can also be written as +. JSON sent in a query string is often percent-encoded so braces, quotes and Unicode survive, and encoding it twice is a common bug.Read more about Percent encoding →URL Encode / DecodeURL Parser
Surrogate pair#UTF-16 surrogate
A surrogate pair is two UTF-16 code units that together encode one Unicode character above U+FFFF, such as an emoji. The high surrogate is in the range U+D800 to U+DBFF and the low surrogate in U+DC00 to U+DFFF. In JSON such characters are escaped as two \u sequences, like \ud83d\ude00 for the grinning face emoji, and a lone surrogate produces broken text.Unicode & Encoding InspectorJSON Escape / Unescape
Unicode code point#code point
A Unicode code point is a number from U+0000 to U+10FFFF that identifies one character. JSON strings are sequences of code points, written directly or as \u escapes. Code points above U+FFFF need two UTF-16 units, which matters in languages like JavaScript that index strings by UTF-16 unit.Unicode & Encoding InspectorJSON Escape / Unescape
Unix epoch timestamp#epoch time · Unix time · POSIX time · unixMillis
A Unix epoch timestamp is the number of seconds, or milliseconds (often called unixMillis), since 00:00:00 UTC on 1 January 1970, ignoring leap seconds. In JavaScript, Date.now() returns milliseconds, so divide by 1000 and round down to get seconds. Store it as a JSON number and document the unit, and use Intl.RelativeTimeFormat to show the gap from now as text like "3 hours ago".Read more about Unix epoch timestamp →Timestamp Converter
UTF-8#UTF8 · Unicode Transformation Format 8-bit
UTF-8 is a character encoding that stores each Unicode code point in one to four bytes and matches ASCII for the first 128 characters. RFC 8259 requires UTF-8 for JSON exchanged between systems that are not part of a closed ecosystem. Sending JSON in another encoding breaks many parsers.Unicode & Encoding InspectorJSON Validator

Tokens, auth and security

JSON in authentication tokens, and the attacks to guard against.

Bearer token#
A bearer token is an access credential that works for whoever holds it, sent as Authorization: Bearer <token>. JWTs are often used as bearer tokens in OAuth 2.0. A stolen token works for an attacker too, so send it only over HTTPS, keep its lifetime short, and keep it out of logs.JWT Decoder
Claim#JWT claims
A claim is one piece of information in a JWT payload, written as a JSON name/value pair such as "sub": "user-123". Claims are registered (like exp and iss), public or private. Anyone can decode a payload, so verify the signature and check exp and aud before you trust any claim.JWT Decoder
Deeply nested JSON denial of service#JSON parser DoS
A deeply nested JSON denial of service is an attack that sends JSON nested so deep, or so large, that parsing exhausts the stack or memory. A recursive parser can overflow on a few thousand nested arrays. Defend against it by capping body size and nesting depth and by setting parse timeouts for untrusted input.JSON Validator
HS256 vs RS256#HMAC vs RSA signing
HS256 signs a JWT with one shared secret key, while RS256 signs with an RSA private key and verifies with the matching public key. With HS256, anyone who can verify a token can also create one, so it fits a single trusted service. RS256 fits systems where many services verify tokens, and servers should pin the expected algorithm so a header cannot switch it to HS256 or "none".JWT Decoder
JSON hijacking#
JSON hijacking is an old attack where a malicious page loaded a JSON endpoint with a script tag and read the data by overriding the Array constructor. It worked because a top-level JSON array was once executable JavaScript. Modern browsers block it, and older defenses include non-GET endpoints, CSRF tokens and prefixing responses with )]}' so they cannot run as script.
JSON injection#
JSON injection happens when untrusted input is pasted into JSON text or a JSON query without encoding, letting an attacker change its structure. It can add or overwrite fields, break out of a string, or slip operators like $ne into a NoSQL query. Build JSON with a JSON library instead of string concatenation, and validate input against a schema.JSON ValidatorJSON Schema Generator
JSON Web Encryption (JWE)#JWE
JSON Web Encryption (JWE) is the standard, defined in RFC 7516, for encrypting a token or message so only the intended recipient can read it. A signed JWT is only encoded, but a JWE payload is ciphertext. The compact form has five parts: protected header, encrypted key, initialization vector, ciphertext and authentication tag.JWT Decoder
JSON Web Key (JWK)#JWK · JWKS
A JSON Web Key (JWK) is a JSON object that represents a cryptographic key, with members like "kty", "alg", "use" and "kid". A JWK Set (JWKS) is a list of them that servers publish at a well-known URL so clients can fetch public keys and verify JWT signatures. Matching a token's "kid" header to a JWKS entry lets you rotate keys without redeploying.JWT Decoder
JSON Web Signature (JWS)#JWS
JSON Web Signature (JWS) is the standard, defined in RFC 7515, for signing content so the receiver can check who sent it and that it was not changed. A signed JWT is a JWS in compact form. JWS also has a JSON form that can carry several signatures over one payload, and the payload is signed, not encrypted.JWT Decoder
JSON Web Token (JWT)#JWT
A JSON Web Token (JWT) is a compact, URL-safe token that carries JSON claims and is signed, or sometimes encrypted. It has three base64url parts joined by dots: header, payload and signature. Every JWT starts with "eyJ" because that is how {" encodes, and anyone can decode the payload, so verify the signature before trusting it.JWT Decoder
JWT header#
The JWT header is the first part of a JSON Web Token, a base64url-encoded JSON object that says how the token is signed. It usually has "alg" for the algorithm and "typ", usually "JWT", and may have "kid" to name the verification key. An attacker can change an unverified header, so servers should pin the algorithms they accept instead of trusting "alg".JWT Decoder
JWT payload#Claims set
The JWT payload is the middle part of a JSON Web Token, a base64url-encoded JSON object that holds the claims, such as user ID, roles and expiry. Encoding is not encryption, so anyone with the token can read it. Keep it small since it travels with every request, and never put passwords or secrets in it.JWT Decoder
JWT signature#
The JWT signature is the third part of a JSON Web Token, computed over the encoded header and payload to prove the token was not changed. HMAC algorithms use a shared secret, and RSA or ECDSA use a private key with a matching public key. Servers must check the signature before trusting any claim and reject tokens that ask for the "none" algorithm.JWT Decoder
Mass assignment#over-posting
Mass assignment, or over-posting, is a bug where a framework copies every field from a JSON request body onto a model, so an attacker can set fields like isAdmin or price. The fix is to accept only an allowlist of fields. A strict schema with additionalProperties set to false also rejects unexpected keys.JSON Validator
OAuth 2.0#OAuth2
OAuth 2.0 is an authorization framework, defined in RFC 6749, that lets an app access a user's resources on another service without getting their password. The user approves the app, which receives an access token, often a JWT, to call protected APIs. OAuth covers authorization only, and OpenID Connect adds login on top.JWT Decoder
OpenID Connect#OIDC
OpenID Connect (OIDC) is an identity layer on top of OAuth 2.0 that adds user login. Along with the access token, the provider issues an ID token, a JWT whose claims such as sub, iss, aud, exp and nonce describe the signed-in user. Apps must verify the ID token's signature against the provider's JWKS and check its claims.JWT Decoder
Prototype pollution#__proto__ pollution
Prototype pollution is a JavaScript vulnerability where keys like __proto__, constructor or prototype in parsed JSON get merged into Object.prototype, changing every object in the app. Deep-merge and clone helpers run on untrusted request bodies are the usual entry point. Reject those keys, use Map or Object.create(null) objects, and validate input against a strict schema.JSON Validator
Registered claims (exp, iss, aud)#Reserved claims · JWT registered claims
Registered claims are the standard JWT claim names defined in RFC 7519: iss (issuer), sub (subject), aud (audience), exp (expiration time), nbf (not before), iat (issued at) and jti (JWT ID). The jti claim is a unique ID for one token, used to block replays or revoke that token. Check exp, iss and aud on every request, or expired and misdirected tokens will pass.Read more about Registered claims (exp, iss, aud) →JWT Decoder

Related data formats and storage

Other data formats close to JSON, and the databases that store it.

Apache Arrow#
Apache Arrow is a columnar in-memory format for tabular data that different languages and processes can share without copying or serializing. It stores each column in one contiguous block, unlike row-based JSON, which speeds up analytics. JSON is often parsed into Arrow for fast processing, and Arrow pairs with on-disk formats like Parquet.
Apache Avro#Avro
Apache Avro is a binary serialization format whose schemas are usually written in JSON. It is common in Hadoop and Kafka, and supports schema evolution so readers and writers can use different schema versions. The schema is JSON, but the encoded data is compact binary.
Apache Parquet#Parquet
Apache Parquet is a columnar file format for analytics on large datasets. It stores values by column instead of by row like JSON or CSV, which compresses better and lets queries read only the columns they need. JSON is often flattened and loaded into Parquet for data lakes and warehouses.
CSV#Comma-Separated Values
CSV (comma-separated values) is a plain-text table format where each line is a row and commas separate the fields. It has no nesting, arrays or types, so nested JSON must be flattened into columns before you convert it. Spreadsheets and data exports use CSV everywhere, which makes JSON to CSV conversion a common task.JSON to CSVCSV to JSONCSV Validator
Denormalization#
Denormalization copies related data into one record so reads do not need joins. In document databases this means embedding nested objects and arrays in a JSON document instead of referencing other collections. Reads get faster, but updates get harder because the same data lives in several places.
Document (MongoDB sense)#BSON document
In MongoDB, a document is one record, a set of field-value pairs that looks like a JSON object but is stored as BSON. Documents live in collections and can hold nested documents, arrays and types like dates and ObjectIds. Queries and drivers use JSON-like syntax to read and write them.JSON Validator
Document database#document store · document-oriented database
A document database is a NoSQL database that stores data as self-contained documents, usually JSON or BSON, instead of rows in tables. Each document can hold nested fields and arrays, so related data comes back in one read. MongoDB, Couchbase and Firestore are examples.
Flattening nested data#JSON flattening
Flattening converts nested JSON objects and arrays into flat columns for CSV files, spreadsheets or SQL tables. Nested keys are joined with a dot or underscore, so address.city becomes one column. Arrays become extra rows or indexed columns.JSON FlattenerJSON to CSV
HOCON#Human-Optimized Config Object Notation
HOCON (Human-Optimized Config Object Notation) is a config format from the Lightbend and Akka ecosystem that is a superset of JSON. It adds comments, optional quotes and commas, dotted keys, file includes and value substitutions. Any valid JSON is valid HOCON, and parsers resolve it to a plain JSON-like tree.
Key-value store#key-value database · KV store
A key-value store is a database that maps unique keys to values and looks them up very fast. The value can be a plain string or a serialized JSON blob. Redis, DynamoDB and etcd are common examples, often used for caches and session data.
NoSQL#Not Only SQL
NoSQL (Not Only SQL) is a broad group of non-relational databases with flexible data models instead of fixed tables. The main types are document, key-value, column-family and graph stores. Many use JSON or a JSON-like format natively, so you can store and query nested objects directly.
Protocol Buffers#protobuf
Protocol Buffers (protobuf) is Google's binary serialization format, with schemas defined in .proto files. Messages are smaller and faster to parse than JSON, and gRPC uses protobuf by default. Fields are identified by numbers rather than names, so you need the schema to decode a message.
Schema evolution#
Schema evolution is changing a data schema over time while old and new versions of producers and consumers keep working together. Backward-compatible changes let new code read old data, and forward-compatible changes let old code read new data. The safe moves are adding optional fields with defaults and never reusing a field for a new meaning, in Avro, Protocol Buffers and JSON APIs alike.
Schema-on-read#
Schema-on-read means storing raw data without a fixed structure and applying a structure only when you query it. Schema-on-write is the opposite and enforces structure when data is inserted. JSON and document databases fit schema-on-read, since you can store any document now and validate or reshape it later.JSON Schema Generator
TOML#Tom's Obvious Minimal Language
TOML (Tom's Obvious Minimal Language) is a config file format that maps directly to a hash table. It uses key-value pairs grouped into [sections], with explicit types for strings, integers and dates. Rust's Cargo.toml and Python's pyproject.toml use it, and most TOML converts cleanly to JSON, though TOML has no null.JSON ⇄ TOML
TSV#Tab-Separated Values
TSV (tab-separated values) is a table format like CSV that separates fields with tabs instead of commas. Tabs rarely appear in data, so TSV needs less quoting and escaping than CSV. Nested JSON still has to be flattened before you export it to TSV.CSV ⇄ TSVJSON to CSV
XML#Extensible Markup Language
XML (Extensible Markup Language) is a tag-based markup format for structured data. It supports attributes, namespaces and XSD schema validation, but it is more verbose than JSON, which replaced it in most modern APIs. Converting between them is common when you work with SOAP services or older systems.JSON ⇄ XMLXML Validator / Formatter
YAML#YAML Ain't Markup Language
YAML (YAML Ain't Markup Language) is a human-readable data format that uses indentation instead of braces and brackets. YAML 1.2 is a superset of JSON, so valid JSON is also valid YAML, and it adds comments, anchors and multi-line strings. It is common for config files such as Kubernetes manifests and CI pipelines.JSON ⇄ YAMLYAML Validator / LinterYAML Formatter