Go to Sign up
Note: Your files never leave your device. We don't upload, transfer, or store your data.
Firebase Realtime Database (RTDB) is a cloud-hosted NoSQL database from Google that stores data as a JSON tree. Changes synchronize in real-time to all connected clients within milliseconds.
Key properties:
| Property | Description |
|---|---|
| JSON tree | All data stored as a single nested JSON tree |
| Real-time sync | Changes propagate to all clients instantly |
| Offline support | SDK caches data locally when offline |
| NoSQL | No tables, no SQL — just paths and values |
| Security rules | Declarative rules control read/write access |
| Auto-scaling | Handles millions of concurrent connections |
Data in RTDB is a JSON tree addressed by paths:
https://your-project.firebaseio.com/users/-Mabc123/name
↑ path ↑ key ↑ field
{
"users": {
"-Mabc123": {
"name": "Alice",
"age": 30,
"active": true
},
"-Mdef456": {
"name": "Bob",
"age": 25,
"active": false
}
}
}
| Key Type | Example | When to Use |
|---|---|---|
| Push Key | -Mabc123xyz | New records with unique auto-generated IDs (default for lists) |
| Array Index | 0, 1, 2 | Ordered lists where position matters (not recommended for most cases) |
| Custom Key | user_001, alice | Natural keys from your data (email, SKU, slug) |
Firebase push keys are auto-generated 20-character strings (e.g., -Mabc123xyz). They are:
Chronologically ordered — newer keys sort after older ones
Globally unique — no collisions across clients
Collision-free for offline — generated without server round-trip
Uniformly distributed — no hot-spotting in database sharding
Array indices (0, 1, 2) are discouraged because:
Inserting or deleting items shifts all indices
Concurrent modifications cause data loss
Firebase documentation recommends against using array indices as keys
| Use Case | Description |
|---|---|
| Database seeding | Populate RTDB with initial data for development or demos |
| Data migration | Migrate data from another system into Firebase |
| Bulk import | Import hundreds or thousands of records at once |
| Staging environments | Set up test data in staging Firebase projects |
| Content management | Upload CMS content into Firebase for mobile/web apps |
| Game data | Import game configurations, levels, or leaderboards |
| Catalog data | Upload product catalogs into Firebase for e-commerce apps |
File Upload: Drag and drop or select a .json file.
Code Editor: Paste or type raw JSON with syntax highlighting and real-time validation.
Set the root path in the Firebase Realtime Database where data will be stored.
| Path Value | Output Structure |
|---|---|
users | {"users": {...}} |
app/data/users | {"app": {"data": {"users": {...}}}} |
| (empty) | No path wrapper — raw list output |
Controls how each item in the JSON array is keyed in the Firebase output.
Auto-generates unique Firebase-style push keys for each item.
Input:
[
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25}
]
Output:
{
"-Mabc123xyz": {"name": "Alice", "age": 30},
"-Mdef456uvw": {"name": "Bob", "age": 25}
}
Uses numeric indices (0, 1, 2) as keys.
Output:
{
"0": {"name": "Alice", "age": 30},
"1": {"name": "Bob", "age": 25}
}
Not recommended for production — concurrent edits cause data loss.
Uses a specified field from each data object as the key.
Configuration: Custom Key Field = "email"
Input:
[
{"email": "[email protected]", "name": "Alice"},
{"email": "[email protected]", "name": "Bob"}
]
Output:
{
"[email protected]": {"email": "[email protected]", "name": "Alice"},
"[email protected]": {"email": "[email protected]", "name": "Bob"}
}
Custom key values must be strings and unique across all items.
Specifies which field from the JSON data to use as the Firebase key. Only applicable when Key Type is set to "Custom Key".
Common choices:
| Field | Example Value | Use Case |
|---|---|---|
id | "user_001" | Internal IDs |
email | "[email protected]" | User accounts |
sku | "PROD-1234" | Product catalogs |
slug | "my-blog-post" | CMS content |
code | "en-US" | Locale/region data |
Important: Firebase keys must be strings and cannot contain ., #, $, /, [, or ].
Controls the output JSON formatting:
| Option | When to Use |
|---|---|
| 2 Spaces | Default — clean, readable |
| 4 Spaces | Deep nesting — easier to read |
| Tab | Match your project's indentation |
| Minified | Smallest file size for upload |
Wraps the output in a root node matching the specified Path.
Enabled (path = users):
{
"users": {
"-Mabc123": {"name": "Alice"},
"-Mdef456": {"name": "Bob"}
}
}
Disabled:
{
"-Mabc123": {"name": "Alice"},
"-Mdef456": {"name": "Bob"}
}
Controls whether fields with null values are kept in the output.
Enabled: {"name": "Alice", "phone": null}
Disabled: {"name": "Alice"} (phone field removed)
Firebase treats null as deletion — enabling this may cause fields to be deleted on import.
All processing runs entirely in your browser. No data is uploaded to any server.
Choose one of two input methods:
Upload a file: Click "Choose File" and select a .json file, or drag it into the upload area.
Paste data: Click "Enter Data" to switch to the code editor. Paste your JSON array.
Important: The tool expects a JSON array of objects.
Use the Properties panel on the right:
Path: Enter the Firebase path (e.g., users, app/data/products).
Key Type: Choose Push Key (recommended), Array Index, or Custom Key.
Custom Key Field: If using Custom Key, specify the field name (e.g., email).
Indent: Choose output formatting.
Output Options: Enable Wrap with Path and/or Include Null Values.
Click Convert. The Firebase-compatible JSON appears in the "Output Data" panel.
Click Copy to Clipboard to paste into Firebase Console or save as .json.
Premium users can click Download File to save.
Input JSON:
[
{"name": "Alice", "email": "[email protected]", "role": "admin", "active": true},
{"name": "Bob", "email": "[email protected]", "role": "editor", "active": true},
{"name": "Charlie", "email": "[email protected]", "role": "viewer", "active": false}
]
Configuration:
Path: users
Key Type: Push Key
Indent: 2 Spaces
Wrap with Path: On
Include Null Values: Off
Output:
{
"users": {
"-Mabc123xyz": {
"name": "Alice",
"email": "[email protected]",
"role": "admin",
"active": true
},
"-Mdef456uvw": {
"name": "Bob",
"email": "[email protected]",
"role": "editor",
"active": true
},
"-Mghi789rst": {
"name": "Charlie",
"email": "[email protected]",
"role": "viewer",
"active": false
}
}
}
Input JSON:
[
{"sku": "LAPTOP-001", "name": "Pro Laptop", "price": 1299.99, "stock": 45},
{"sku": "PHONE-001", "name": "Smart Phone", "price": 699.99, "stock": 120},
{"sku": "TABLET-001", "name": "Air Tablet", "price": 499.99, "stock": 0}
]
Configuration:
Path: products
Key Type: Custom Key
Custom Key Field: sku
Wrap with Path: On
Output:
{
"products": {
"LAPTOP-001": {
"sku": "LAPTOP-001",
"name": "Pro Laptop",
"price": 1299.99,
"stock": 45
},
"PHONE-001": {
"sku": "PHONE-001",
"name": "Smart Phone",
"price": 699.99,
"stock": 120
},
"TABLET-001": {
"sku": "TABLET-001",
"name": "Air Tablet",
"price": 499.99,
"stock": 0
}
}
}
Configuration:
Path: (empty)
Key Type: Push Key
Wrap with Path: Off
Output:
{
"-Mabc123": {"name": "Alice", "active": true},
"-Mdef456": {"name": "Bob", "active": false}
}
Firebase Realtime Database keys have restrictions that differ from regular JSON:
| Restriction | Details |
|---|---|
| No dots | . is not allowed — used as path separator |
| No hash | # is not allowed |
| No dollar sign | $ is not allowed |
| No forward slash | / is not allowed — used as path separator |
| No brackets | [ and ] are not allowed |
| No ASCII control characters | Characters 0x00–0x1F and 0x7F |
| Max key length | 768 bytes |
| Max tree depth | 32 levels |
| Max node value | 10 MB when serialized |
| Feature | Realtime Database | Firestore |
|---|---|---|
| Data model | JSON tree | Documents and collections |
| Querying | Limited, deep filtering | Index-based, complex queries |
| Offline | SDK cache | Persistent cache |
| Scaling | Single region | Multi-region |
| Import format | JSON (this tool) | JSON (different structure) |
| Pricing | Per GB downloaded | Per read/write/delete |
This tool generates data for Realtime Database specifically.
No. All conversion happens locally in your browser using JavaScript. The tool only transforms the JSON format — you import the result into Firebase yourself.
A push key is a unique, auto-generated identifier created by Firebase (e.g., -Mabc123xyz). It is chronologically ordered, globally unique, and collision-free — making it ideal for lists in Realtime Database.
Use Push Key for new records without a natural identifier (most cases). Use Custom Key when you have a unique natural key like email, SKU, or slug. Avoid Array Index for production data — concurrent edits cause data loss.
Use the Firebase Console (Import JSON button), Firebase CLI (firebase database:set), or the REST API (PUT or PATCH to your database URL). See the Import section above for details.
Firebase keys cannot contain ., #, $, /, [, ], or ASCII control characters.
It wraps the output in a root node matching the Path you specified. Without it, the output is the raw keyed list without a path wrapper.
When enabled, fields with null values are kept in the output. When disabled, they are removed. Note: importing null values into Firebase deletes those fields.
No. This tool generates data for Firebase Realtime Database. Firestore uses a different document/collection model.
The tool processes data entirely in your browser. Files up to 10 MB typically convert without issues. Firebase RTDB limits individual node values to 10 MB.
Yes. The tool is responsive and works on smartphones and tablets.