Search JSON Keys and Values
Find literal text in strict JSON keys and primitive values, then copy the path or locate the original value in your browser.
Tool workspace
Search JSON
Enable JavaScript to search locally in your browser.
Search decoded keys and primitive values. Whole text means exact text equality: 1 differs from 1.0 and 1e0. Spaces, quotes and line breaks in the query are literal. Ignoring case uses JavaScript lowercase without removing accents or normalizing Unicode. Regex and JSONPath are not interpreted.
Input: 1,000,000 UTF-16 units; file: 4,000,000 bytes; query: 1,000 units; depth: 200; nodes: 100,000; results: 1,000; rows per page: 50.
Search options
Text budget: 5,000,000 UTF-16 units; each path: 10,000; all retained paths: 2,000,000. Parsing: 1,000,000 work units; indexing: 100,000 visits; searching: 100,000 visits. Search timeout: 15,000 ms; page/navigation: 3,000 ms. Text and paths can exhaust a budget even when input size and node count fit.
Your JSON, query and results stay in this browser tab. Nothing is uploaded or saved.
Load example
{
"name": "Ana",
"nickname": "Anabel",
"Ana": "Ana",
"active": true,
"note": null,
"items": [
{ "name": "ANA", "price": 1.0 },
{ "a.b": "banana", "empty": {} }
]
}The example with “Ana” and default options finds $.name, $.nickname and $.Ana. Load it, then press Search.
Ready to search.
Some diagnostics were omitted.
No matches. Try changing the scope, match mode or case sensitivity.
Clipboard is unavailable. Select and copy this full path.
Find literal text with an explicit search
Paste strict JSON or open a UTF-8 .json file. Enter literal text and press Search. Defaults search both keys and values, match partial text and respect case. Spaces, tabs, line breaks, quotes, backslashes and regex characters are data: the query is never trimmed, decoded as JSON or interpreted as regex, wildcards or JSONPath. An empty query is rejected; one space is valid.
Keys and strings are searched after JSON escape decoding. Values include strings, numbers, booleans and null. Objects and arrays are traversed rather than searched as serialized text. A container can match its property key. Array indices and path components are not searchable keys. Primitive roots are valid, with path $; empty containers produce a successful search with no matches.
Try the shared example
{
"name": "Ana",
"nickname": "Anabel",
"Ana": "Ana",
"active": true,
"note": null,
"items": [
{ "name": "ANA", "price": 1.0 },
{ "a.b": "banana", "empty": {} }
]
}
Load the example to set the query to Ana and restore defaults; then press Search. Defaults find $.name, $.nickname and $.Ana. Whole text finds $.name and $.Ana: Ana only matches Anabel in partial mode. Ignoring case in partial mode adds $.items[0].name and $.items[1]["a.b"]. Keys with whole text find only $.Ana; values with whole text and ignored case find $.name, $.Ana and $.items[0].name. A key and value match on $.Ana produces one row with both indicators.
Text equality, types and numeric spelling
Searching null finds both null and the string "null"; each row shows its type. Numbers use their original lexeme: 1, 1.0, 1e0 and -0 remain distinct texts. With the example, whole text 1 finds no values, while partial 1 finds the price. An integer such as 9007199254740993 is searched without rounding; a precision warning describes JavaScript’s internal approximation. Numbers outside the supported finite range are rejected.
Ignoring case applies JavaScript toLowerCase() independently of page language. It does not remove accents, normalize Unicode or perform full case folding: ÁRBOL matches árbol, but arbol does not; Straße differs from STRASSE, İ differs from i, and É differs from e followed by U+0301. Paths and previews preserve original spelling.
Navigate, copy and interpret the limits
Results follow source order, one row per matching node. A path button selects the whole value in the original editor, including the value associated with a matching key. It does not change JSON. The selected path and line/column appear beside the editor; Back to result restores focus. Copy path copies the complete path, with manual copying available if clipboard access fails. Shortened key/value previews are marked separately.
At most 1,000 results are retained, in pages of 50. Exactly 1,000 is a complete count if traversal finishes; a discovered 1,001st match produces “at least 1,001”, with no claim of an exact total. Only retained results can be paged. Invalid strict JSON, decoded duplicate keys such as {"a":1,"\u0061":2}, or a hard budget failure produce no result list; they differ from zero matches. JSONC, JSON5, repair and replacement are outside this tool.
Files allow 4,000,000 bytes; original input 1,000,000 UTF-16 units; queries 1,000; container depth 200; source nodes 100,000. Text comparisons have a 5,000,000-unit budget, individual paths 10,000 and retained paths 2,000,000. These can fail before size or node limits. Search has 15 seconds; pages/navigation 3 seconds. One initial BOM is ignored with a warning, and navigation retains original offsets.
Processing stays local in memory. File selection and copying require explicit actions; nothing is uploaded or saved in URLs or browser storage. Editing input, query or options, loading a file/example or clearing removes previous results. Cancel preserves input and options. JavaScript and local Workers are required. Related tools open normally without transferring your document.