Converts each row into a JSON object using the first row as keys.
Spreadsheet:
| name | age | city |
|---|---|---|
| John | 30 | NYC |
| Jane | 25 | LA |
Output:
[
{ "name": "John", "age": 30, "city": "NYC" },
{ "name": "Jane", "age": 25, "city": "LA" }
]Converts the sheet into a raw 2D array, including headers.
Output:
[ ["name", "age", "city"], ["John", 30, "NYC"], ["Jane", 25, "LA"] ]
Create nested objects and arrays using special header notation.
Use . to create nested objects.
Spreadsheet:
| name | address.street | address.city | address.zip |
|---|---|---|---|
| John | 123 Main St | NYC | 10001 |
Output:
[
{
"name": "John",
"address": {
"street": "123 Main St",
"city": "NYC",
"zip": 10001
}
}
]Chain multiple dots for deeper nesting.
Spreadsheet:
| name | address.geo.lat | address.geo.lng |
|---|---|---|
| Office | 40.7128 | -74.0060 |
Output:
[
{
"name": "Office",
"address": {
"geo": {
"lat": 40.7128,
"lng": -74.006
}
}
}
]Use [0], [1], etc. to create arrays.
Spreadsheet:
| name | tags[0] | tags[1] | tags[2] |
|---|---|---|---|
| John | developer | designer | writer |
Output:
[
{
"name": "John",
"tags": ["developer", "designer", "writer"]
}
]Combine brackets and dots for arrays of objects.
Spreadsheet:
| name | items[0].product | items[0].price | items[1].product | items[1].price |
|---|---|---|---|---|
| Order1 | Apple | 1.50 | Banana | 0.75 |
Output:
[
{
"name": "Order1",
"items": [
{ "product": "Apple", "price": 1.5 },
{ "product": "Banana", "price": 0.75 }
]
}
]When enabled, automatically converts string values to appropriate types.
| Cell Value | Converted To | Type |
|---|---|---|
| 123 | 123 | number |
| 45.67 | 45.67 | number |
| -89 | -89 | number |
| true | true | boolean |
| false | false | boolean |
| TRUE | true | boolean |
| 2024-01-15 | "2024-01-15T00:00:00.000Z" | ISO date string |
| (empty cell) | null | null |
| Hello | "Hello" | string |
Type Inference ON:
{ "count": 42, "active": true, "name": "John" }Type Inference OFF:
{ "count": "42", "active": "true", "name": "John" }Spreadsheet:
| name | phone | |
|---|---|---|
| John Doe | john@example.com | 555-1234 |
| Jane Smith | jane@example.com | 555-5678 |
Output:
[
{
"name": "John Doe",
"email": "john@example.com",
"phone": "555-1234"
},
{
"name": "Jane Smith",
"email": "jane@example.com",
"phone": "555-5678"
}
]Spreadsheet:
| id | name | price | category.main | category.sub | inStock |
|---|---|---|---|---|---|
| 1 | Laptop | 999.99 | Electronics | Computers | true |
| 2 | Desk | 249.50 | Furniture | Office | false |
Output:
[
{
"id": 1,
"name": "Laptop",
"price": 999.99,
"category": {
"main": "Electronics",
"sub": "Computers"
},
"inStock": true
},
{
"id": 2,
"name": "Desk",
"price": 249.5,
"category": {
"main": "Furniture",
"sub": "Office"
},
"inStock": false
}
]Spreadsheet:
| username | addresses[0].type | addresses[0].city | addresses[1].type | addresses[1].city |
|---|---|---|---|---|
| john123 | home | New York | work | Boston |
Output:
[
{
"username": "john123",
"addresses": [
{ "type": "home", "city": "New York" },
{ "type": "work", "city": "Boston" }
]
}
]No hard limit. Processing happens in your browser, so very large sheets may take a few seconds.
Currently exports the active sheet only. Switch sheets and export separately.
Make sure "Infer data types" is checked before generating preview.
Leave all array index cells empty - they will be omitted from output.