Compute Percentiles for JSON Files Online
Compute percentiles, median, MAD, mode, and kurtosis for numeric columns in JSON files directly in your browser. Optionally group by a category column. Results download as CSV — no upload required.
How to compute Percentiles for JSON files
- Drop your file onto the upload area. The first numeric column is selected, and the panel shows how many numeric columns were found.
- Check the numeric column, and pick a Group by column if you want one row of statistics per category. The default is the whole file.
- Tick the statistics you need. Median, p25, p75, p95 and p99 are ticked by default. p90, MAD, mode and kurtosis are also available.
- Optionally type a custom percentile between 0 and 1, such as 0.8, to add one more column.
- Click Compute Percentiles, review the summary table, and download it as CSV.
Your file is processed locally in your browser and is never uploaded. The free limit is 50 MB per file; larger files work if your device has the memory for them.
Worked example
A backend team has a small sample of API request timings and wants the median and tail latency per endpoint to check against a 300 ms target.
Input (JSON)
[
{
"endpoint": "/search",
"latency_ms": 120,
"status_code": 200
},
{
"endpoint": "/search",
"latency_ms": 180,
"status_code": 200
},
{
"endpoint": "/login",
"latency_ms": 40,
"status_code": 200
},
{
"endpoint": "/search",
"latency_ms": 200,
"status_code": 200
},
{
"endpoint": "/login",
"latency_ms": 60,
"status_code": 401
},
{
"endpoint": "/search",
"latency_ms": 300,
"status_code": 200
}
]Settings
- Numeric column: latency_ms
- Group by: endpoint
- Statistics: Median and p90 and p99 ticked (p25, p75 and p95 unticked)
Result
| endpoint | median | p90 | p99 |
|---|---|---|---|
| /login | 50 | 58 | 59.8 |
| /search | 190 | 270 | 297 |
Percentiles use linear interpolation between sorted values. /search has four values, so p90 sits 70% of the way from 200 to 300, which is 270, and p99 sits 97% of the way, which is 297. The median of an even count is the average of the middle two. Groups are sorted by name, and the summary downloads as CSV.
Working with JSON files
Numbers in JSON arrive as numbers, so a key like "latency_ms": 184 is numeric straight away. If any object sends the value as a string, "latency_ms": "184", the key may load as text and the statistics cannot run. Integers and decimals mixed in one key are fine and load as a floating-point column. Very large JSON integers, beyond about 9 quadrillion, lose precision in that case, which does not matter for timings but can for ids.
Objects that lack the key, or have it set to null, are ignored in every statistic. Only top-level keys can be selected, so a value nested under "metrics": {"latency_ms": ...} needs to be flattened first. A grouping key with missing values produces a group whose name is empty, listed last in the summary. Booleans are not numeric, so a key like "cached": true cannot be summarised, but it works well as the Group by key to compare cached and uncached timings. The output is a CSV summary, not JSON, with one row per group and one column per statistic.
Frequently Asked Questions
Can I compute percentiles on a nested JSON field?
Not directly. Flatten the JSON first so the nested field becomes its own top-level column, then pick it as the numeric column.
What if some JSON records store the number as a string?
The key can then load as text and the run fails. Convert the key to a number with Cast Column Types, or fix the source so it sends numbers.
Which percentile method does the tool use?
Continuous percentiles with linear interpolation (quantile_cont). A percentile that falls between two values is interpolated, so the result may not appear in your data. The median uses the same method.
What do MAD, mode and kurtosis tell me?
MAD is the median of absolute distances from the median, a spread measure that ignores outliers. Mode is the most frequent value; with ties one of them is returned. Kurtosis measures how heavy the tails are and needs at least four values.
What is the custom percentile column called?
It is named after the value you type, with the dot replaced by an underscore. Typing 0.8 gives a column called p_custom_0_8. Values outside 0 to 1 are ignored.
Related Tools
Detect Outliers in JSON Files Online
Detect statistical outliers in JSON files directly in your browser. Flag or remove rows where numeric values exceed a chosen number of standard deviations from the mean — no upload required.
Bin Column in JSON Files Online
Bucket a numeric column in JSON files into labelled ranges — equal-width bins or custom edges. Runs entirely in your browser.
Aggregate JSON Files Online
Group and aggregate JSON files by any column directly in your browser. Calculate sum, average, min, max, and count for any numeric column — no upload required.
Compute Percentiles for CSV Files Online
Compute percentiles, median, MAD, mode, and kurtosis for numeric columns in CSV files directly in your browser. Optionally group by a category column. Results download as CSV — no upload required.
Compute Percentiles for Excel Files Online
Compute percentiles, median, MAD, mode, and kurtosis for numeric columns in Excel files directly in your browser. Optionally group by a category column. Results download as CSV — no upload required.
Compute Percentiles for Parquet Files Online
Compute percentiles, median, MAD, mode, and kurtosis for numeric columns in Parquet files directly in your browser. Optionally group by a category column. Results download as CSV — no upload required.
JSON Viewer Online
View and inspect JSON files directly in your browser. Browse rows, check column names and data types — no upload required, your data stays on your device.
Convert JSON to Parquet Online
Convert JSON files to Parquet format directly in your browser. No upload required — your data never leaves your device.