{ }jsonkit
Tools/Validate/JSON Size Analyzer
Search tools…⌘K
Format
{ }JSON Formatter
≡→JSON Minifier
\"JSON Escape / Unescape
a→zJSON Sorter
⇄{}JSON Flattener
Validate
JSON Validator
±JSON Diff / Compare
§JSON Schema Generator
JWT Decoder
ΔJSON Patch / Merge Patch
kbJSON Size Analyzer
Convert
→csvJSON to CSV
csv→CSV to JSON
⇄ymlJSON ⇄ YAML
⇄xmlJSON ⇄ XML
→tsJSON to TypeScript
b64Base64 Encode / Decode
%2FURL Encode / Decode
clkTimestamp Converter
→zJSON to Zod
→pyJSON to Pydantic
→goJSON to Go
→javaJSON to Java
⇄jsonlJSON ⇄ JSONL
5→JSON5 / JSONC to JSON
Query
$.JSONPath / JQ Tester
.*Regex Tester
Generate
Mock JSON Data Generator
idUUID / NanoID Generator
#Hash Generator
kb

JSON Size Analyzer

Find the heaviest keys and paths in your JSON payload.
processes as you type · client-side
Sample
Upload
Top
102550
Leaves only
⧉ Copy output ⌘C
Download
Share
Clear
Input219 B · paste or drop a file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Size report
codetree
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
{ "totalBytes": 160, "prettyBytes": 219, "keyCount": 9, "maxDepth": 2, "heaviest": [ { "path": "$", "bytes": 160, "percent": 100, "type": "object" }, { "path": "plan", "bytes": 46, "percent": 28.7, "type": "object" }, { "path": "roles", "bytes": 18, "percent": 11.3, "type": "array" }, { "path": "email", "bytes": 17, "percent": 10.6, "type": "string" }, { "path": "name", "bytes": 14, "percent": 8.8, "type": "string" }, { "path": "plan.renews", "bytes": 12, "percent": 7.5, "type": "string" }, { "path": "id", "bytes": 10, "percent": 6.3, "type": "string" }, { "path": "roles[1]", "bytes": 8, "percent": 5, "type": "string" }, { "path": "roles[0]", "bytes": 7, "percent": 4.4, "type": "string" }, { "path": "plan.tier", "bytes": 5, "percent": 3.1, "type": "string" } ] }
✓ valid (RFC 8259)219 B → 1104 B0.0 msLn 1, Col 1UTF-8

About JSON Size Analyzer

The JSON size analyzer measures exactly how big your JSON payload is and, more usefully, tells you which parts of it are taking up the space. Paste an API response, a config file or a state blob and it reports the total byte size, the number of keys, the maximum nesting depth and a ranked list of the heaviest paths so you can see at a glance what to trim.

Everything runs in your browser. Nothing you paste is uploaded, logged or sent to a server — the analysis is plain JavaScript on your own machine, so it is safe to inspect production responses, tokens and customer data. There is no signup, no size paywall and no Pro tier; it is free forever.

It is built for developers optimizing bandwidth and bundle size, backend engineers auditing bloated API responses, and anyone debugging a payload that is unexpectedly large. Instead of guessing, you get a byte-accurate breakdown of where the weight lives — a single base64 image, a verbose array or a deeply nested object.

How it works

Byte sizes, measured accurately

Total size is the minified UTF-8 byte length of your JSON, measured with TextEncoder — the same number that would travel over the wire once whitespace is stripped. Multi-byte characters (emoji, accents, non-Latin scripts) are counted as their real byte cost, not as one character each, so the total matches what a server would actually send.

Heaviest paths, ranked

Every subtree is measured by its own JSON byte size, then the top 10, 25 or 50 are listed largest-first with their path, byte size, percent of the total and value type. Paths use dot and bracket notation like `profile.links.site` and `scores[3]`, matching the flattener, so you can jump straight to the offending value.

Subtrees or leaves only

By default the ranking includes whole objects and arrays, which surfaces heavy branches like an entire `profile` object. Flip on Leaves only to rank just the individual scalar values — strings, numbers, booleans and null — when you want to find the single fields that dominate rather than their containers.

Keys and depth at a glance

Alongside the size breakdown you get the total key count across the whole document and the maximum nesting depth. These are quick health signals: a very high depth can slow parsers and complicate access, and a runaway key count often points to data that should be paginated or normalized.

Frequently asked questions

Is my JSON uploaded anywhere?

No. The entire analysis runs locally in your browser with JavaScript — nothing is uploaded, logged or sent to a server. You can disconnect from the internet and it still works, so it is safe for production payloads and sensitive data.

How is the total byte size calculated?

It is the UTF-8 byte length of the minified JSON, measured with the browser's TextEncoder. That is the true wire size once whitespace is removed, and multi-byte characters like emoji are counted at their real byte cost.

Does it show the gzipped size?

No — the reported sizes are raw, uncompressed bytes. Gzip compression needs an asynchronous streaming API that would not fit this tool's instant, synchronous design. In practice gzip shrinks JSON by roughly 60–90%, so your compressed transfer size will be much smaller than the raw total shown here.

What is the difference between subtree and leaves-only mode?

Subtree mode (the default) ranks whole objects and arrays too, so you see heavy branches like an entire nested object. Leaves-only mode ranks just individual scalar values, which is better for finding the single fields — a long string or base64 blob — that dominate the payload.

Why don't the listed percentages add up to 100%?

Percentages are each path's share of the total, but nested paths overlap: a parent object's bytes already include its children, and structural characters like braces and commas are not attributed to any single path. In leaves-only mode the leaf values also exclude the key names and punctuation around them, so the sum is naturally below 100%.