Tabular Operations (Free Online Tool)
Shape tabular JSON rows with spreadsheet-like operations before later transforms or export
Paste your JSON → Get results instantly (no signup)
→ Apply tabular operations to the items array and calculate each item's line total.
1{2 "order_id": "ord_1049",3 "customer": {4 "name": "Maya Chen",5 "email": "maya@example.com"6 },7 "items": [8 {9 "sku": "tee_black_m",10 "qty": 2,11 "price": "24.00",12 "line_total": 4813 },14 {15 "sku": "cap_white",16 "qty": 1,17 "price": "18.00",18 "line_total": 1819 }20 ],21 "payments": [22 {23 "status": "failed",24 "amount": 6625 },26 {27 "status": "paid",28 "amount": 6629 }30 ]31}Love the result?
Use this exact pipeline in your app, backend, or LLM workflow.
No setup needed. Works with curl, Node, Python.
Uses example data. For edited input, copy from the playground.
Works with:
- API responses
- Nested JSON
- Arrays & objects
Example: input → output
{ "order_id": "ord_1049", "customer": { "name": "Maya Chen", "email": "maya@example.com" }, "items": [ { "sku": "tee_black_m", "qty": 2, "price": "24.00" }, { "sku": "cap_white", "qty": 1, "price": "18.00" } ], "payments": [ {{ "order_id": "ord_1049", "customer": { "name": "Maya Chen", "email": "maya@example.com" }, "items": [ { "sku": "tee_black_m", "qty": 2, "price": "24.00", "line_total": 48 }, { "sku": "cap_white", "qty": 1, "price": "18.00", "line_total": 18 } ],Related tools
- Rename KeysRename known keys or convert key casing without changing the underlying values
- Find & ReplaceFind and replace matching keys or values across JSON using broad search patterns
- FilterFilter rows, items, keys, or values by explicit conditions and keep only the matches you want
- Flatten / NestConvert nested objects to flat key paths or rebuild them using delimiter and casing rules
- Pick FieldsKeep only a known allowlist of fields and remove everything else
Read more on the blog
Advanced usage (optional)
Tabular Operations
v1.0.0Description
Tabular Operations
Build a sequence of spreadsheet-like row operations on JSON arrays. Works like a mini data pipeline — operations execute in order, each transforming the output of the previous step.
Operations
FILTER
Keep rows matching a condition expression.
FILTER {{ age >= 18 }}
FILTER {{ status === "active" }}ADD COLUMN
Create a new column from an expression.
ADD COLUMN fullName = {{ firstName + " " + lastName }}
ADD COLUMN tax = {{ salary * 0.1 }}RENAME COLUMN
Rename a column, preserving row field order.
RENAME COLUMN firstName TO first_nameREMOVE COLUMN
Delete one or more columns from all rows.
REMOVE COLUMN tempId, debugFlagSORT BY
Sort rows by a field. Default direction is ASC. Nulls sort to end.
SORT BY age DESC
SORT BY name ASCDEDUPLICATE BY
Keep only the first occurrence per unique key combination.
DEDUPLICATE BY email
DEDUPLICATE BY firstName, lastNameDSL Mode
Switch to DSL mode for a text-based interface. One operation per line, comments start with #.
# Clean up user data
FILTER {{ age >= 18 }}
REMOVE COLUMN tempId, debugFlag
ADD COLUMN fullName = {{ firstName + " " + lastName }}
SORT BY fullName ASC
DEDUPLICATE BY emailExpressions
Expressions use {{ }} syntax and support field references, arithmetic, string concatenation, and comparisons:
{{ age >= 18 }}— boolean comparison{{ firstName + " " + lastName }}— string concatenation{{ price * quantity }}— arithmetic
Configuration
| Name | Type | Default | Description |
|---|---|---|---|
| Mode | enum | document-row | document-row treats an object document as one formula row. array-path edits each item in a selected nested array.
document-row array-path |
| Source Array | path-picker | | Select the nested array whose items should be edited as tabular rows. |
| Operations | tabular-operations | [] | Build a sequence of spreadsheet-like row operations. Switch to DSL mode for a text-based interface. |
Examples
Apply tabular operations to the items array and calculate each item's line total.1{2 "order_id": "ord_1049",3 "customer": {4 "name": "Maya Chen",5 "email": "maya@example.com"6 },7 "items": [8 {9 "sku": "tee_black_m",10 "qty": 2,11 "price": "24.00",12 "line_total": 4813 },14 {15 "sku": "cap_white",16 "qty": 1,17 "price": "18.00",18 "line_total": 1819 }20 ],21 "payments": [22 {23 "status": "failed",24 "amount": 6625 },26 {27 "status": "paid",28 "amount": 6629 }30 ]31}ADD COLUMN line_total = {{ qty * price }}
API Usage
curl -X POST https://your-domain.com/api/v1/utilities/structure.tabular-ops \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"inputs":{"primary":{"order_id":"ord_1049","customer":{"name":"Maya Chen","email":"maya@example.com"},"items":[{"sku":"tee_black_m","qty":2,"price":"24.00"},{"sku":"cap_white","qty":1,"price":"18.00"}],"payments":[{"status":"failed","amount":66},{"status":"paid","amount":66}]}},"config":{"mode":"array-path","sourcePath":"items","operations":[{"type":"addColumn","name":"line_total","formula":"{{ qty * price }}"}]}}'1{2 "order_id": "ord_1049",3 "customer": {4 "name": "Maya Chen",5 "email": "maya@example.com"6 },7 "items": [8 {9 "sku": "tee_black_m",10 "qty": 2,11 "price": "24.00",12 "line_total": 4813 },14 {15 "sku": "cap_white",16 "qty": 1,17 "price": "18.00",18 "line_total": 1819 }20 ],21 "payments": [22 {23 "status": "failed",24 "amount": 6625 },26 {27 "status": "paid",28 "amount": 6629 }30 ]31}