Language record
JSON
JSON has no declarations beyond its keys, so the index records the document's nesting shape: the file is a root, an object-valued key is a container, an array-valued key is a property carrying an array, and a `$ref` that names another file is recorded as the dependency it is — while a `$ref` inside `allOf` is a superset relationship rather than a bare reference.
The registry row this page is generated from
Read at render time from the same family row the register reads, so nothing in this block can disagree with it.
- Extensions
- .json, .jsonc, .jsonl, .jsonlog
- Registry names
json- Recorded symbols
- keys · nesting shape · composition
Relationship types this analyzer constructs
9 of 14 constructed, read from this analyzer's source and re-derived by the languages gate. Each row below is one of the engine's types, in the engine's own order.
| Relationship type | Constructed |
|---|---|
calls | constructed by this analyzer |
extends | constructed by this analyzer |
implements | constructed by this analyzer |
uses | constructed by this analyzer |
imports | constructed by this analyzer |
exports | constructed by this analyzer |
contains | constructed by this analyzer |
references | constructed by this analyzer |
overrides | constructed by this analyzer |
instantiates | ruled absent |
decorates | ruled absent |
renders | ruled absent |
mixes_in | ruled absent |
part_of | ruled absent |
9 constructed, 5 not constructed. All 5 absent types are recorded as ruled absent: the written reason and the corpus measurement behind each are in this family's completeness record. The register explains what each label means.
What this analyzer does not resolve
- Nothing in JSON calls anything, because the format has no way to express a call. What you get is shape: which key sits under which, and how deep the nesting goes. The vocabulary is
contains,references,imports,uses,exportsandextends— the last only for a$refinside anallOfarray, because a superset-of IS a relationship, whileanyOfandoneOfare alternatives and publish only their references. - A
$refis a string, so it is classified rather than assumed. One that names another file is recorded as both a dependency and a reference, because that is what it is; one naming a pointer inside this document resolves here; one naming neither stays unresolved and is stored at reduced confidence. Corpus-wide the ends are mostly ambiguous — 64.54% of reference endpoints match more than one symbol — so a$refis a place to look, not a target to assume. - Nothing is compared across documents, so
nameinpackage.jsonandnamein a fixture are neither a conflict nor a match. And an inline array's scalar items publish nothing at all: array elements are positional and unnamed, so there is no identity to record, and only an object element inside an array becomes a symbol of its own.
Every line above was written against JSON’s own analyzer module and is named against a construct in it, so it can be checked against the source. Nothing here is inherited from a template, or from another language’s page.
Where you meet it in a repository
Recognised by extension — .json, .jsonc, .jsonl, .jsonlog. Everything below is about where those files actually sit in a working repository.
package.json,tsconfig.json, a lockfile and a CI fixture are all.jsonand all index as one family; the file's stem is the root, sopackageandtsconfigare two independent roots rather than two views of one.- A JSON Schema is the case where the nesting shape is the whole point:
properties,itemsand$defsbecome containers you can walk, andrequiredmarks the individual properties inside them. - Generated JSON — a build manifest, an API response fixture, a lockfile with tens of thousands of lines — is mostly leaf values, so the records worth having are the containers and the
$refs rather than the scalars. A Terraform plan JSON is the extreme case: over 10,000 symbols, nearly all of them repeating the same names.
Questions this index answers
Phrased as retrievals, because that is what an index can honestly do: it holds the symbols and the edges between them, and hands them back with the evidence attached.
- What keys does this document declare at the top level?
- Where is this key set, and what is nested beneath it?
- Which fields does this schema mark as required?
- Which other files does this document reference?
What the analyzer sees in code like this
{
"name": "acme-api",
"scripts": { "build": "tsc" },
"dependencies": ["express", "pg"],
"$ref": "common.json#/definitions/Base"
}Symbols are stored with the file they came from and the bytes they span, so a hit points at a line rather than at a guess. The annotations in the sample are commentary for the reader, not strings the index would store.
Languages that turn up in the same repository
Web, data & config — the count beside each name is how many relationship types that family’s analyzer constructs.
The extensions, registry names, recorded symbols and relationship types above are the parser registry row for JSON, read while the page rendered — the same row the register reads, so the two surfaces cannot tell two stories. Every relationship type listed as constructed appears in src/ast/real-*, the analyzer modules bb ships. bb 0.1.0 answers from a local store over 50 languages (53 registry ids, three of them aliases). There is no benchmark on this page: every claim here is one you can go and read in the source.