Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Completely random JSON generator and structured schema-based JSON generator

License

NotificationsYou must be signed in to change notification settings

jsonjoy-com/json-random

Repository files navigation

A fast, flexible random JSON generation library with zero dependencies. Generate random JSON data for testing, development, and prototyping with powerful template-based schemas or simple randomization.

Features

  • Fast & Lightweight: Zero dependencies, optimized for performance
  • Template-Based Generation: Create structured JSON following schemas
  • Flexible Randomization: Control probabilities, types, and structure
  • Deterministic Mode: Reproducible random generation with seeds
  • String Token System: Powerful pattern-based string generation
  • TypeScript Support: Full type definitions included

Installation

npm install @jsonjoy.com/json-random

Quick Start

import{RandomJson,TemplateJson,randomString,deterministic}from'@jsonjoy.com/json-random';// Generate random JSONconstrandomData=RandomJson.generate();// Generate structured JSON from templateconstuserData=TemplateJson.gen(['obj',[['id',['int',1,1000]],['name',['str',['list',['pick','John','Jane','Bob'],' ',['pick','Doe','Smith']]]],['active','bool']]]);// Generate random strings with patternsconstemail=randomString(['list',['pick','user','admin','test'],'@',['pick','example.com','test.org']]);

API Reference

RandomJson

TheRandomJson class provides methods for generating random JSON data with configurable options.

RandomJson.generate(options?: RandomJsonOptions): unknown

Generates a random JSON object with the specified options.

interfaceRandomJsonOptions{rootNode?:'object'|'array'|'string';nodeCount?:number;odds?:NodeOdds;strings?:Token;}interfaceNodeOdds{null:number;boolean:number;number:number;string:number;binary:number;array:number;object:number;}

Examples:

// Basic random JSON (default: object with ~32 nodes)constbasic=RandomJson.generate();// Smaller JSON with 5 nodesconstsmall=RandomJson.generate({nodeCount:5});// Force root to be an arrayconstarrayRoot=RandomJson.generate({rootNode:'array',nodeCount:3});// Customize node type probabilitiesconststringHeavy=RandomJson.generate({nodeCount:10,odds:{null:1,boolean:1,number:2,string:20,// Much higher probability for stringsbinary:0,array:2,object:5}});// Use custom string patternsconstcustomStrings=RandomJson.generate({nodeCount:5,strings:['pick','alpha','beta','gamma','delta']});

Static Generation Methods

Generate specific JSON types directly:

// Generate random string (default length: 1-16 chars)conststr=RandomJson.genString();constlongStr=RandomJson.genString(50);// Generate random numberconstnum=RandomJson.genNumber();// Generate random booleanconstbool=RandomJson.genBoolean();// Generate random arrayconstarr=RandomJson.genArray();constcustomArr=RandomJson.genArray({nodeCount:3,odds:{string:10,number:5,boolean:1,null:0,array:0,object:0,binary:0}});// Generate random objectconstobj=RandomJson.genObject();constcustomObj=RandomJson.genObject({nodeCount:4,odds:{string:8,number:8,boolean:2,null:1,array:1,object:1,binary:0}});// Generate random binary dataconstbinary=RandomJson.genBinary();constlargeBinary=RandomJson.genBinary(100);

TemplateJson

TheTemplateJson class generates JSON data following structured templates, perfect for creating realistic test data.

TemplateJson.gen(template?: Template, opts?: TemplateJsonOpts): unknown

Generates JSON following the specified template.

interfaceTemplateJsonOpts{maxNodes?:number;// Soft limit on total nodes generated (default: 100)}

Template Types

Templates define the structure and type of generated data:

Basic Types
// Shorthand templatesTemplateJson.gen('str');// Random stringTemplateJson.gen('int');// Random integerTemplateJson.gen('int64');// Random 64-bit integer (bigint)TemplateJson.gen('float');// Random floatTemplateJson.gen('num');// Random number (int or float)TemplateJson.gen('bool');// Random booleanTemplateJson.gen('bin');// Random binary data (Uint8Array)TemplateJson.gen('nil');// null value// Type-specific templatesTemplateJson.gen(['str',tokenPattern]);// String with patternTemplateJson.gen(['int',min,max]);// Integer in rangeTemplateJson.gen(['int64',min,max]);// 64-bit integer in range (bigint)TemplateJson.gen(['float',min,max]);// Float in rangeTemplateJson.gen(['bool',fixedValue]);// Fixed or random booleanTemplateJson.gen(['bin',min,max,omin,omax]);// Binary with length and octet rangeTemplateJson.gen(['lit',anyValue]);// Literal value (cloned)

Examples:

// Strings with patternsconstgreeting=TemplateJson.gen(['str',['list',['pick','Hello','Hi','Hey'],' ',['pick','World','There']]]);// Numbers in rangesconstage=TemplateJson.gen(['int',18,100]);constprice=TemplateJson.gen(['float',0.01,999.99]);constscore=TemplateJson.gen(['num',0,100]);// 64-bit integers (bigint)constlargeId=TemplateJson.gen(['int64',BigInt('1000000000000'),BigInt('9999999999999')]);consttimestamp=TemplateJson.gen(['int64',BigInt('1640000000000'),BigInt('1700000000000')]);// Binary data (Uint8Array)consthash=TemplateJson.gen(['bin',32,32]);// 32-byte hashconstkey=TemplateJson.gen(['bin',16,16,0,255]);// 16-byte key with full octet rangeconstrandomBytes=TemplateJson.gen(['bin',1,10]);// 1-10 random bytes// Fixed valuesconstisActive=TemplateJson.gen(['bool',true]);constuserId=TemplateJson.gen(['lit','user_12345']);
64-bit Integer Templates

Generate large integers using JavaScript's bigint type:

// Basic 64-bit integerconstid=TemplateJson.gen('int64');// Random bigint in safe range// 64-bit integer with rangeconsttimestamp=TemplateJson.gen(['int64',BigInt('1640000000000'),// Min valueBigInt('1700000000000')// Max value]);// Large database IDsconstdbId=TemplateJson.gen(['int64',BigInt('1000000000000000000'),BigInt('9999999999999999999')]);// Fixed bigint valueconstconstant=TemplateJson.gen(['int64',BigInt('42'),BigInt('42')]);
Binary Data Templates

Generate binary data as Uint8Array:

// Basic binary data (0-5 bytes)constdata=TemplateJson.gen('bin');// Binary with specific length rangeconsthash=TemplateJson.gen(['bin',32,32]);// Exactly 32 bytesconstkey=TemplateJson.gen(['bin',16,64]);// 16-64 bytes// Binary with octet value constraintsconstrestrictedData=TemplateJson.gen(['bin',8,// Min length: 8 bytes16,// Max length: 16 bytes32,// Min octet value: 32126// Max octet value: 126 (printable ASCII range)]);// Cryptographic examplesconstaesKey=TemplateJson.gen(['bin',32,32]);// 256-bit AES keyconstiv=TemplateJson.gen(['bin',16,16]);// 128-bit IVconstsalt=TemplateJson.gen(['bin',16,32]);// 16-32 byte saltconstsignature=TemplateJson.gen(['bin',64,64,0,255]);// 64-byte signature
Array Templates
typeArrayTemplate=['arr',min?,// Minimum length (default: 0)max?,// Maximum length (default: 5)template?,// Template for itemshead?,// Fixed items at starttail?// Fixed items at end];

Examples:

// Basic arraysconstnumbers=TemplateJson.gen(['arr',2,5,'int']);constmixed=TemplateJson.gen(['arr',1,3]);// Arrays with head/tailconstcoords=TemplateJson.gen(['arr',0,0,null,[['float',-180,180],['float',-90,90]],// head: [longitude, latitude][['lit','WGS84']]// tail: coordinate system]);// Nested arraysconstmatrix=TemplateJson.gen(['arr',2,3,['arr',2,3,['int',0,10]]]);
Object Templates
typeObjectTemplate=['obj',fields?// Array of field definitions];typeObjectTemplateField=[key,// Key name (string or Token)valueTemplate,// Template for the valueoptionality?// Probability of omission (0 = required, 1 = always omit)];

Examples:

// User profileconstuser=TemplateJson.gen(['obj',[['id',['int',1,10000]],['username',['str',['list',['pick','user','admin','guest'],['char',48,57,4]// 4 digits]]],['email',['str',['list',['repeat',3,10,['char',97,122]],// 3-10 lowercase letters'@',['pick','example.com','test.org','demo.net']]]],['age',['int',18,120]],['isActive','bool'],['profile',['obj',[['bio',['str',['repeat',10,50,['char',32,126]]]],['avatar',['str',['list','https://avatar.example.com/',['char',48,57,8]]],0.3]// 30% chance to omit]]]]]);// API ResponseconstapiResponse=TemplateJson.gen(['obj',[['status',['pick','success','error']],['timestamp',['int',1640000000,1700000000]],['data',['arr',0,10,['obj',[['id','int'],['value','str']]]]]]]);
Map Templates

Generate key-value maps where all values follow the same template:

typeMapTemplate=['map',keyToken?,// Token for generating keysvalueTemplate?,// Template for valuesmin?,// Minimum entries (default: 0)max?// Maximum entries (default: 5)];

Examples:

// Configuration mapconstconfig=TemplateJson.gen(['map',['pick','timeout','retries','cache_ttl','max_connections'],['int',1,3600],3,5]);// User permissionsconstpermissions=TemplateJson.gen(['map',['list','can_',['pick','read','write','delete','admin']],'bool',2,6]);// Localization stringsconsttranslations=TemplateJson.gen(['map',['pick','welcome','goodbye','error','success','loading'],['str',['repeat',5,20,['char',32,126]]],3,8]);
Union Templates (Or)

Choose randomly from multiple template options:

// Mixed data typesconstmixedValue=TemplateJson.gen(['or','str','int','bool']);// Different user typesconstuser=TemplateJson.gen(['or',['obj',[['type',['lit','admin']],['permissions',['lit','all']]]],['obj',[['type',['lit','user']],['level',['int',1,5]]]],['obj',[['type',['lit','guest']],['expires','int']]]]);
Recursive Templates

Create self-referencing structures:

// Tree structureconsttree=():Template=>['obj',[['value','int'],['left',tree,0.3],// 30% chance of left child['right',tree,0.3]// 30% chance of right child]];consttreeData=TemplateJson.gen(tree);// Nested commentsconstcomment=():Template=>['obj',[['id','int'],['text','str'],['author','str'],['replies',['arr',0,3,comment,[],[]],0.4]// 40% chance of replies]];constcommentThread=TemplateJson.gen(comment);

String Token System

TherandomString function and string templates use a powerful token system for pattern-based string generation.

randomString(token: Token): string

typeToken=TokenLiteral|TokenPick|TokenRepeat|TokenChar|TokenList;

Token Types

TokenLiteral - Static strings
randomString('Hello');// Always returns "Hello"
TokenPick - Choose randomly from options
randomString(['pick','red','green','blue']);// Returns one of: "red", "green", "blue"randomString(['pick','small','medium','large','extra-large']);
TokenRepeat - Repeat patterns
randomString(['repeat',3,5,'X']);// Returns 3-5 X's: "XXX", "XXXX", or "XXXXX"randomString(['repeat',2,4,['pick','A','B']]);// Returns 2-4 random A's or B's: "AB", "BAA", "ABBA", etc.
TokenChar - Character ranges
randomString(['char',65,90]);// Single random A-ZrandomString(['char',97,122,5]);// 5 random a-z charsrandomString(['char',48,57,3]);// 3 random digits// Unicode rangesrandomString(['char',0x1F600,0x1F64F]);// Random emoji
TokenList - Concatenate tokens
randomString(['list','user_',['char',48,57,4],// 4 digits'_',['pick','active','inactive']]);// Example: "user_1234_active"// Email generationrandomString(['list',['repeat',3,12,['char',97,122]],// 3-12 lowercase letters['pick','.','_','-',''],// Optional separator['repeat',0,5,['char',97,122]],// 0-5 more letters'@',['pick','gmail.com','yahoo.com','example.org']]);

Complex String Examples

// Phone numbersconstphone=randomString(['list','+1-',['char',50,57,3],// Area code (2-9)'-',['char',48,57,3],// Exchange'-',['char',48,57,4]// Number]);// Product codesconstproductCode=randomString(['list',['pick','PRD','ITM','SKU'],'-',['char',65,90,2],// 2 uppercase letters['char',48,57,6]// 6 digits]);// URLsconsturl=randomString(['list','https://',['repeat',3,15,['char',97,122]],// Domain name['pick','.com','.org','.net','.io'],['pick','','/','/api/','/v1/'],['repeat',0,10,['char',97,122]]// Optional path]);

Utility Functions

deterministic(seed: number | (() => number), callback: () => T): T

Execute code with deterministic random number generation.

import{deterministic,RandomJson,TemplateJson}from'@jsonjoy.com/json-random';// Generate the same data every timeconstdata1=deterministic(42,()=>RandomJson.generate({nodeCount:5}));constdata2=deterministic(42,()=>RandomJson.generate({nodeCount:5}));// data1 and data2 are identical// Different seeds produce different but deterministic resultsconstdataA=deterministic(123,()=>TemplateJson.gen('str'));constdataB=deterministic(456,()=>TemplateJson.gen('str'));// Use custom random number generatorconstcustomRng=rnd(999);constdata3=deterministic(customRng,()=>RandomJson.generate());

rnd(seed: number): () => number

Create a deterministic random number generator function.

import{rnd}from'@jsonjoy.com/json-random';constrandomFn=rnd(12345);console.log(randomFn());// 0.00002...console.log(randomFn());// 0.77271...console.log(randomFn());// 0.32429...

int(min: number, max: number): number

Generate a random integer between min and max (inclusive).

import{int}from'@jsonjoy.com/json-random';constdice=int(1,6);// 1-6constpercentage=int(0,100);// 0-100constid=int(1000,9999);// 4-digit ID

Use Cases

Testing & Development

// Generate test user dataconsttestUsers=Array.from({length:10},()=>TemplateJson.gen(['obj',[['id',['int',1,10000]],['name',['str',['list',['pick','John','Jane','Bob','Alice','Charlie'],' ',['pick','Doe','Smith','Johnson','Brown']]]],['email',['str',['list',['repeat',3,10,['char',97,122]],'@test.com']]],['age',['int',18,65]],['active','bool']]]));// Generate API response mock dataconstmockApiResponse=TemplateJson.gen(['obj',[['success',['lit',true]],['timestamp',['lit',Date.now()]],['data',['arr',5,15,['obj',[['id','int'],['status',['pick','pending','completed','failed']],['value',['float',0,1000]]]]]]]]);// Generate cryptographic test dataconstcryptoData=TemplateJson.gen(['obj',[['userId',['int64',BigInt('1000000000000'),BigInt('9999999999999')]],['sessionId',['str',['list','sess_',['repeat',32,32,['pick', ...'0123456789abcdef'.split('')]]]]],['publicKey',['bin',32,32]],// 256-bit public key['signature',['bin',64,64]],// 512-bit signature['nonce',['bin',16,16]],// 128-bit nonce['timestamp',['int64',BigInt(Date.now()),BigInt(Date.now()+86400000)]]]]);

Load Testing

// Generate large datasets for performance testingconstloadTestData=deterministic(42,()=>Array.from({length:1000},()=>RandomJson.generate({nodeCount:50,odds:{null:1,boolean:2,number:10,string:8,binary:0,array:3,object:5}})));

Configuration Generation

// Generate service configurationsconstserviceConfig=TemplateJson.gen(['obj',[['database',['obj',[['host',['str',['list','db-',['char',48,57,2],'.example.com']]],['port',['int',3000,6000]],['timeout',['int',1000,30000]],['pool_size',['int',5,50]]]]],['cache',['obj',[['enabled','bool'],['ttl',['int',60,3600]],['max_size',['int',100,10000]]]]],['security',['obj',[['api_key',['bin',32,32]],// 256-bit API key['session_timeout',['int64',BigInt('3600'),BigInt('86400')]],// 1 hour to 1 day in seconds['max_request_size',['int64',BigInt('1048576'),BigInt('104857600')]]// 1MB to 100MB]]],['features',['map',['pick','feature_a','feature_b','feature_c','feature_d'],'bool',2,5]]]]);

Helper Methods for Easy Generation

The library provides convenient helper methods for generating common data types without needing to construct templates manually. These methods are available in theexamples module:

import{genUser,genAddress,genProduct,genOrder,genRandomExample}from'@jsonjoy.com/json-random/lib/examples';// Generate common data types quicklyconstuser=genUser();constaddress=genAddress();constproduct=genProduct();constorder=genOrder();// Generate random example from any templateconstrandomData=genRandomExample();

Available Helper Methods

MethodDescription
genUser()Generate comprehensive user profile with details
genUserBasic()Generate basic user with essential information
genAddress()Generate address with street, city, state, etc.
genProduct()Generate product with name, price, category
genOrder()Generate order with items and customer info
genTransaction()Generate financial transaction data
genBankAccount()Generate bank account information
genSocialPost()Generate social media post
genSocialProfile()Generate social media profile
genLocation()Generate location with coordinates
genApiResponse()Generate API response with data array
genApiResponseDetailed()Generate comprehensive API response
genServiceConfig()Generate service configuration
genPatient()Generate medical patient record
genMedicalRecord()Generate comprehensive medical record
genStudent()Generate student profile
genCourse()Generate course information
genSensorReading()Generate IoT sensor reading
genIotDevice()Generate IoT device profile
genLogEntry()Generate log entry for monitoring
genMetricData()Generate metric data for monitoring
genRandomExample()Generate random data from any available template

Usage Examples

// Generate test user data for API testingconsttestUser=genUser();console.log(testUser);// Output: { id: 4829, username: "user_7432", email: "alice@gmail.com", ...}// Generate address for form testingconstshippingAddress=genAddress();console.log(shippingAddress);// Output: { street: "123 Main St", city: "Springfield", state: "CA", ... }// Generate product catalogconstproducts=Array.from({length:10},()=>genProduct());// Generate random test dataconstrandomTestData=Array.from({length:5},()=>genRandomExample());

Demos

Run the included demos to see the library in action:

# Random JSON generationnpx ts-node src/__demos__/json-random.ts# Template-based generationnpx ts-node src/__demos__/map-demo.ts

TypeScript Support

The library includes full TypeScript definitions:

importtype{RandomJsonOptions,NodeOdds,Template,TemplateJsonOpts,Token,ArrayTemplate,ObjectTemplate,MapTemplate}from'@jsonjoy.com/json-random';

License

Apache-2.0

About

Completely random JSON generator and structured schema-based JSON generator

Resources

License

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Contributors2

  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp