Documentation
Dummy JSON Generator is a free, browser-based tool for creating realistic fake JSON, CSV, and SQL test data — instantly, with no signup or server involved.
Quick start
Go from zero to generated data in under 60 seconds:
- Open the tool — dummyjsongenerator.com/json-generator. No account required.
- Add fields — click Add Field and pick a type from the dropdown. Rename the field to match your schema.
- Set record count — type a number or drag the slider. Range: 1 to 1,000,000.
- Choose format — toggle between JSON, CSV, or SQL.
- Generate — click the Generate button. Copy to clipboard or download as a file.
The interface
The tool is divided into three panels:
- Schema builder (left) — add, rename, reorder, and delete fields. Drag handles let you reorder fields by dragging.
- Settings bar (top) — set record count, output format, indentation, and table name (SQL only).
- Output panel (right) — live preview of the generated output. Copy to clipboard or download from here.
Personal fields
Fields relating to a person's identity and contact information.
Personal| Field type | Example output | Description |
|---|---|---|
| firstName | "Ayesha" | Random first name from a diverse international pool |
| lastName | "Rahman" | Random surname |
| fullName | "Ayesha Rahman" | First + last combined |
| "ayesha.rahman94@gmail.com" | Realistic email with varied providers and formats | |
| phone | "+1-555-234-8821" | Phone number with country code |
| age | 27 | Integer between 18 and 90 |
| gender | "female" | One of: male, female, non-binary |
| avatar | "https://i.pravatar.cc/150?img=47" | Avatar image URL via pravatar.cc |
| username | "ayesha_dev94" | Web-safe lowercase username |
| password | "K9!mPqR2x" | Random password string (mixed case, digits, symbols) |
| bio | "Software engineer who loves..." | Short one-sentence biography |
Example output
{
"id": "a3f8b2c1-4e5d-6f7a-8b9c-0d1e2f3a4b5c",
"firstName": "Ayesha",
"lastName": "Rahman",
"email": "ayesha.rahman94@gmail.com",
"phone": "+1-555-234-8821",
"age": 27,
"avatar": "https://i.pravatar.cc/150?img=47"
}Location fields
Geographic data including addresses, coordinates, and postal codes.
Location| Field type | Example output | Description |
|---|---|---|
| city | "Lahore" | City name from a global pool |
| country | "Pakistan" | Full country name |
| countryCode | "PK" | ISO 3166-1 alpha-2 code |
| address | "42 Baker Street" | Street-level address line |
| zipCode | "75001" | Postal / ZIP code |
| latitude | 31.5204 | Latitude decimal (–90 to +90) |
| longitude | 74.3587 | Longitude decimal (–180 to +180) |
| timezone | "Asia/Karachi" | IANA timezone identifier |
Technical / ID fields
Identifiers and low-level technical values used in application data.
Technical| Field type | Example output | Description |
|---|---|---|
| uuid | "a3f8b2c1-4e5d-4f7a-8b9c-..." | RFC 4122 UUID v4 — globally unique |
| id | 4821 | Auto-incrementing integer starting at 1 |
| boolean | true | Random true or false |
| hexColor | "#3a7bd5" | CSS hex color code |
| ip | "192.168.1.47" | IPv4 address |
| userAgent | "Mozilla/5.0 (Windows NT..." | Browser user-agent string |
uuid field generates v4 UUIDs (random). For sequential integer IDs use id instead — it auto-increments from 1 across all records.Number fields
Numeric field types with configurable ranges.
Numbers| Field type | Example output | Options |
|---|---|---|
| integer | 47 | Min / max range (default: 1–1000) |
| float | 3.14159 | Min / max / decimal places |
| price | 29.99 | Always 2 decimal places, positive |
| percentage | 67.4 | 0–100, one decimal place |
Configuring ranges
Click the settings icon next to an integer or float field to set min/max bounds. The range is inclusive on both ends.
Date & time fields
All date/time fields output ISO 8601 formatted values unless otherwise noted.
Dates & Times| Field type | Example output | Description |
|---|---|---|
| date | "2024-08-14" | ISO date string (YYYY-MM-DD) |
| dateTime | "2024-08-14T09:33:21.000Z" | ISO 8601 full datetime with UTC timezone |
| timestamp | 1723625601 | Unix timestamp in seconds |
| pastDate | "2023-03-07" | Random date within the past 3 years |
| futureDate | "2027-11-22" | Random date within the next 3 years |
Internet & commerce fields
InternetCommerce| Field type | Example output | Description |
|---|---|---|
| url | "https://example.com/p/42" | Random web URL |
| domain | "acme-corp.io" | Domain name only |
| company | "Nexus Systems Ltd" | Company name |
| jobTitle | "Senior Frontend Engineer" | Job title |
| productName | "Wireless Ergonomic Keyboard" | Product name |
| currency | "USD" | ISO 4217 currency code |
| iban | "GB29 NWBK 6016 1331 9268 19" | International bank account number |
Text fields
Free-text content at varying lengths.
Text| Field type | Example output | Description |
|---|---|---|
| word | "luminous" | Single random English word |
| sentence | "The quick developer built..." | One grammatically complete sentence |
| paragraph | "Developers often face the..." | 3–5 sentence paragraph |
| lorem | "Lorem ipsum dolor sit amet..." | Lorem ipsum placeholder text |
| status | "active" | One of: active, inactive, pending |
Enum (custom list)
The Enum field type lets you provide your own list of values. Each record gets one value from the list, selected at random with equal probability.
Configuration
- Add a field and select Enum as the type
- In the values input, enter your options separated by commas
- Each option is trimmed of whitespace before use
Field name: status
Field type: Enum
Values: draft, published, archived, deleted[
{ "status": "published" },
{ "status": "draft" },
{ "status": "archived" }
]status field whenever you need domain-specific values like pending_review, approved, rejected or free, starter, pro, enterprise.JSON output
The default output format. Each record is an object inside a top-level array.
[
{
"id": "a3f8b2c1-4e5d-6f7a-8b9c-0d1e2f3a4b5c",
"fullName": "Ayesha Rahman",
"email": "ayesha.rahman94@gmail.com",
"city": "Lahore",
"status": "active",
"createdAt": "2024-08-14T09:33:21.000Z"
},
{
"id": "b7c3d4e5-5f6a-7b8c-9d0e-1f2a3b4c5d6e",
"fullName": "James O'Brien",
"email": "jobrien_dev@outlook.com",
"city": "Dublin",
"status": "inactive",
"createdAt": "2025-01-02T16:47:05.000Z"
}
]Indentation options
- 2 spaces (default) — most readable for development
- 4 spaces — matches many style guides
- Compact — minified, no whitespace — smallest file size
CSV output
Comma-separated values with a header row. Ideal for spreadsheets, Postman data-driven testing, and database imports via COPY or LOAD DATA INFILE.
id,fullName,email,city,status,createdAt
a3f8b2c1,Ayesha Rahman,ayesha@example.com,Lahore,active,2024-08-14T09:33:21.000Z
b7c3d4e5,James O'Brien,james@example.com,Dublin,inactive,2025-01-02T16:47:05.000ZEscaping rules
- String values containing commas or double quotes are automatically wrapped in double quotes
- Internal double quotes are escaped as
""(RFC 4180 standard) - Newlines within values are escaped as
\n
Importing CSV into databases
-- Fastest import method — 10-50x faster than INSERT
\COPY users (id, full_name, email, city, status, created_at)
FROM '/path/to/data.csv'
CSV HEADER;LOAD DATA INFILE '/path/to/data.csv'
INTO TABLE users
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;SQL output
Generates batched INSERT INTO statements ready to execute against any SQL database.
INSERT INTO records (id, fullName, email, city, status, createdAt) VALUES
('a3f8b2c1', 'Ayesha Rahman', 'ayesha@example.com', 'Lahore', 'active', '2024-08-14 09:33:21'),
('b7c3d4e5', 'James O''Brien', 'james@example.com', 'Dublin', 'inactive', '2025-01-02 16:47:05');Notes
- Statements are batched at 1,000 rows per INSERT — much faster than one INSERT per row
- The default table name is
records— change it in the SQL settings panel before generating - Single quotes inside string values are escaped as
''(standard SQL escaping) - Works with PostgreSQL, MySQL, MariaDB, SQLite, and SQL Server
Changing the table name
If you've already downloaded the file and need to rename the table:
# Linux / macOS
sed -i 's/INSERT INTO records/INSERT INTO users/g' generated-data.sql
# Windows PowerShell
(Get-Content generated-data.sql) -replace 'INSERT INTO records', 'INSERT INTO users' | Set-Content generated-data.sqlSchema saving
Save your field configuration as a named schema and reload it in any future session.
Saving a schema
- Configure your fields in the schema builder
- Click the Save Schema button in the top bar
- Enter a descriptive name (e.g., "E-commerce Order", "User Analytics Event")
- Click Save
Loading a schema
- Click Load Schema
- Select from your saved schemas in the dropdown
- Your field configuration is restored instantly
localStorage in your browser. They persist between sessions but are specific to your browser and device. Clearing site data removes saved schemas.Record counts & performance
Generation happens entirely in your browser using JavaScript. Performance depends on record count, field count, and field complexity.
| Record count | Speed | Notes |
|---|---|---|
| 1 – 1,000 | Instant | All field types, no restrictions |
| 1,000 – 100,000 | 1–3 seconds | All field types work well |
| 100,000 – 500,000 | 5–15 seconds | Avoid heavy text fields (paragraph, lorem) |
| 500,000 – 1,000,000 | 15–45 seconds | Keep field count under 15. Use integer, enum, uuid, date types for best speed. |
Configuration options
JSON indent
Controls whitespace in JSON output. Options: 2 spaces, 4 spaces, compact.
Use compact to minimize file size when generating large datasets for load testing.
SQL table name
The table name used in INSERT INTO statements. Default: records. Change this to match your actual table name before generating.
Field names
Every field name is editable. Click the field name in the schema builder to rename it. Names are used exactly as-is in the output — including capitalization and underscores.
Examples: fullName, full_name, FullName — all produce different key names in the output.
Use case: API testing
Generate a JSON fixture file and use it as a mock API response or as data for a Postman collection run.
With Postman (data-driven testing)
- Generate your data as CSV with fields matching your API request body
- In Postman: Collection → Run Collection → upload your CSV as the data file
- Reference fields in your request body as
{{email}},{{firstName}}, etc. - Postman runs one request per CSV row
With MSW (Mock Service Worker)
import { http, HttpResponse } from 'msw';
import users from './fixtures/users.json';
export const handlers = [
http.get('/api/users', () => {
return HttpResponse.json(users);
}),
];Use case: Database seeding
Generate a seed dataset and commit it to your repository so every developer runs the same data.
With Prisma
// prisma/seed.ts
import { PrismaClient } from '@prisma/client';
import users from '../seed-data/users.json';
const prisma = new PrismaClient();
async function main() {
await prisma.user.createMany({ data: users, skipDuplicates: true });
console.log(`Seeded ${users.length} users.`);
}
main().finally(() => prisma.$disconnect());"prisma": {
"seed": "ts-node prisma/seed.ts"
}Run with: npx prisma db seed
Use case: Load testing
Generate up to 1,000,000 records for performance benchmarking and stress testing.
With k6
import http from 'k6/http';
import { check } from 'k6';
import data from './load-test-data.json';
export const options = { vus: 100, duration: '30s' };
export default function () {
const record = data[Math.floor(Math.random() * data.length)];
const res = http.post('https://your-api.com/events', JSON.stringify(record), {
headers: { 'Content-Type': 'application/json' },
});
check(res, { 'status 200': (r) => r.status === 200 });
}Use case: Frontend development
Build your UI with realistic data before the backend API is ready.
React — local import
import users from '@/data/users.json';
export default function UserList() {
return (
<ul>
{users.map(user => (
<li key={user.id}>
<img src={user.avatar} alt={user.fullName} />
<span>{user.fullName}</span>
</li>
))}
</ul>
);
}Next.js — mock API route
// app/api/users/route.ts
import { NextResponse } from 'next/server';
import users from '@/data/users.json';
export async function GET() {
return NextResponse.json(users);
}Browser compatibility
| Browser | Supported | Min version |
|---|---|---|
| Chrome | ✓ | 90+ |
| Firefox | ✓ | 88+ |
| Safari | ✓ | 14+ |
| Edge | ✓ | 90+ |
| Opera | ✓ | 76+ |
| Internet Explorer | ✗ | Not supported |
JavaScript must be enabled. No extensions or plugins required.
Privacy & security
All data generation happens entirely in your browser using JavaScript.
- No server-side processing — your schema configuration and generated data never leave your device
- No logging — we don't log what field types you use or what data you generate
- No analytics on your data — only standard page-level analytics (pageviews) are collected
- Safe for sensitive schemas — if your schema represents a sensitive data model (healthcare, finance), there's no risk of exposure
localStorage. They are never transmitted to any server.Limits
| Parameter | Limit |
|---|---|
| Maximum records per generation | 1,000,000 |
| Maximum fields per schema | 50 |
| Saved schemas per browser | Unlimited (localStorage) |
| File download size | Browser memory limit (~1–2GB for most browsers) |
| API access | Not available (client-side only) |
FAQ
Can I use generated data in production?
No. Generated data is invented — it refers to no real people or entities. Do not use it in production systems, for any decision-making, or in any context where real data is expected.
Is there a REST API?
Not currently. The tool is fully client-side. For programmatic generation in your codebase, use Faker.js (JavaScript/TypeScript) or Datafaker (Java/Kotlin).
Can I generate nested JSON objects?
Flat objects only in the current version. Nested object and array field support is planned for v3.0.
Why does generation slow down at very large record counts?
JavaScript is single-threaded. At 1M records, memory pressure and GC pauses are noticeable. Keeping your field count low and avoiding text-heavy fields (paragraph, lorem, userAgent) significantly improves speed at scale.
My browser ran out of memory generating 1M records — what do I do?
Reduce record count or field count. For very large datasets (>500K records), use a programmatic approach with Faker.js and a streaming file writer — see our load testing guide.
How do I report a bug or request a feature?
Open an issue on GitHub or email hello@dummyjsongenerator.com.
Changelog
v2.0 — June 2026
- Full rebuild with Nuxt 3 / Vue.js
- New dark design system
- SQL export format
- Schema save / load
- Record limit raised from 100K to 1,000,000
- Enum field type
- Compact JSON indentation option
v1.0 — 2025
- Initial release
- JSON and CSV export
- 20 field types