SmartQueryTools

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.

How to bin Column in JSON files

  1. Drop your file. The first numeric column is preselected, and the new column name defaults to its name plus _bin.
  2. Pick the column to bin. Only numeric columns are listed.
  3. Choose Equal-width bins and set how many (2 to 50, default 5), or choose Custom edges and type the break points separated by commas, without thousands separators.
  4. Choose Add as new column or Replace column, then click Bin column.
  5. Check the labels in the preview and download the file in the same format.

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 food delivery service wants to report how many orders arrived within 30 minutes, within an hour, within two hours, and later than that.

Input (JSON)

[
  {
    "order_ref": "D-8812",
    "zone": "Northside",
    "delivery_minutes": 22
  },
  {
    "order_ref": "D-8813",
    "zone": "Harbour",
    "delivery_minutes": 45
  },
  {
    "order_ref": "D-8814",
    "zone": "Northside",
    "delivery_minutes": 60
  },
  {
    "order_ref": "D-8815",
    "zone": "Airport",
    "delivery_minutes": 135
  },
  {
    "order_ref": "D-8816",
    "zone": "Harbour",
    "delivery_minutes": 30
  }
]

Settings

  • Column to bin: delivery_minutes
  • Binning mode: Custom edges
  • Edge values: 0, 30, 60, 120
  • New column name: delivery_minutes_bin
  • Output: Add as new column

Result

order_refzonedelivery_minutesdelivery_minutes_bin
D-8812Northside22< 30
D-8813Harbour4530 – 60
D-8814Northside6060 – 120
D-8815Airport135≥ 120
D-8816Harbour3030 – 60

Each range includes its lower edge and excludes its upper edge, so 30 falls in "30 – 60" and 60 in "60 – 120". Everything below the second edge is labelled "< 30", and the first edge, 0, does not appear in any label. Values at or above the last edge share "≥ 120". The labels are text, ready for Count by value.

Working with JSON files

JSON numbers load as BIGINT when every value is a whole number and as DOUBLE when any has a fraction, and both are listed. Numbers sent as strings, such as "delivery_minutes": "45", are text and are not listed until you cast the key to a number. A key with mixed kinds of values, such as numbers in most objects and "unknown" in a few, loads as the JSON type and is not listed either. Objects missing the key get null, and null values get a null label rather than a range.

The output JSON keeps every key and adds the label key as the last field of each object. With Replace column the numeric key is removed and the label key still goes last. Labels are JSON strings. The ≥ sign and the en dash are written as the characters themselves rather than \u escapes, and any JSON parser reads them.

Frequently Asked Questions

My JSON numbers are strings. Can I still bin them?

Not directly. Cast the key to DOUBLE or INTEGER with Cast Column Types, download the result, and bin that file.

Can I bin a nested JSON value?

Only top-level numeric keys are listed. Flatten the file first so the nested number becomes its own column.

Why does equal-width binning give me one more label than the number of bins?

The last edge is the column maximum, and values at or above the last edge get their own "≥" label. With 5 bins on values from 0 to 100 the labels are < 20, 20 – 40, 40 – 60, 60 – 80, 80 – 100 and ≥ 100, and only the maximum lands in the last one. For exactly N groups, use custom edges and put the last edge above the maximum.

What happens to empty values?

They stay empty. A NULL number gets a NULL label, so it is not counted in any range. Use Fill Nulls first if you want them in a range of their own.

How do I sort the bin labels in the right order?

The labels are text, so a plain sort puts "100 – 200" before "30 – 60". Sort by the original numeric column instead. Choosing Add as new column keeps that column in the file.

Related Tools