npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

grunt-jsonschema-faker

v0.3.1

Published

Grunt task generating fake data according to JSON schema

Readme

Grunt JSON Schema Faker logo

grunt-jsonschema-faker npm module

NPM version Dependency Status devDependency Status

grunt-jsonschema-faker v0.2.7 Build Status: Linux

Grunt task generating fake data according to JSON schema

Getting Started

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-jsonschema-faker --save-dev

Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-jsonschema-faker');

This plugin was designed to work with Grunt 0.4.x. If you're still using grunt v0.3.x it's strongly recommended that you upgrade.

Jsonschema-faker task

Run this task with the grunt jsonschema-faker command.

Task targets, files and options may be specified according to the grunt Configuring tasks guide.

Executes json-schema-faker over a JSON Schema file to produce randomized data that conforms to the schema. In other words, the schema specifies what might be the content of a JSON (it specifies content, structure, nesting, types, etc.) and json-schema-faker generates such content, using 3rd party libs beneath (faker.js, chance.js and randexp.js).

Options

indent

Type: integer

If defined, generated JSON data is stringified using given indentation. If undefined, the output becomes a big one-liner.

size

Type: integer

Specify how many elements conforming to a given schema shall be created.

extend

Type: function

If defined, the function may extend json-schema-faker dependencies. The function accepts one argument, being jsf object itself on which .extend may be called to alter faker.js and chance.js. The grunt-level (outer extend function) doesn't have to return anything.

references

Type: files

If defined, jsf will load defined files and allow to use them as referenced subschemas. Grunt's file.expand used to resolve file paths.

external

Type: array of objects

If defined, grunt will load external sources and let them re-use them in your generated fake data (local grunt target). This is useful when you want to generate several fake files in which data is related.

external source parameters

The external option needs to be an array of objects, each of them needs to have following 4 fields defined:

  • name: string. This is just a name of the external source. It will be used in the JSON schema (as a json-schema-faker custom format)
  • generator: string [random|cycle]. Currently, two generators are provided, but you may write your own
  • src: string. Path to the external data source file.
  • map: function. This function will be used by _.map to modify each element from the source file. You may return only the id of each source element, but you may as well need to return a complex structure to re-use.

Read the following section if you're not familiar with external sources.

example

Let's analyse a typical use case.

For example, groups of users are generated in group.json file and the users are generated in user.json. Each user object should have groupId attribute that points to a group object (which has an id attribute) in group.json file. But, since both files are generated using a separate grunt task/target, how can we generate exactly the same values in both files, group.json and user.json, if using a random hash function?

This is where the external option comes in. You can mock entire database keeping consistent relations between files.

explanation
  • first, you need to specify the order in which the files are generated. In our example group.json comes first, then it's user.json, because it needs groups to generate itself. group.json file might be whatever you want - it might be generated dynamically as well. The user.json defines the external option.
  • when user.json is about to be generated, the grunt task iterates over external definitions. For each external source:
    • it loads the content from src file
    • map all elements using given map function
    • creates a closure that will have access to the mapped collection. The closure returns single values (which are products of map) and the strategy depends on generator used.
    • the closure is registered as an ordinary json-schema-faker custom format using the name
    • the JSON schema will handle custom name format.

Usage Examples

Basic

grunt.initConfig({
    jsonschema_faker: {
        options: {
            indent: 2
        },
        target: {
            src: ['path/to/schema/file/**/*.json'],
            dest: 'path/to/dest/file.json',
            options: {
                size: 100
            }
        }
    }
});

It is also important to define the JSON schema properly. Use JSON schema generator along with json-schema-faker online demo for faster development.

Extending dependencies

You may also want to extend faker.js and/or chance. In order to do that, define a extend option function (for each target or globally):

grunt.initConfig({
    jsonschema_faker: {
        target: {
            src: ['path/to/schema/file/**/*.json'],
            dest: 'path/to/dest/file.json',
            options: {
                size: 100,
                extend: function(jsf) {
                    jsf.extend('faker', function(faker){
                        faker.locale = "pl"; // or any other language
                        faker.custom = {
                            statement: function(length) {
                                return faker.name.firstName() + " has " + faker.finance.amount() + " on " + faker.finance.account(length) + ".";
                            }
                        };
                        return faker;
                    });
                }
            }
        }
    }
});

External Sources

Following example illustrates using external sources to generate relative data:

grunt.initConfig({
    jsonschema_faker: {
        externalSources: {
            src: 'schema/external-sources.json',
            dest: 'data/external-sources.json',
            options: {
                external: [{
                    name: 'randomUserId',
                    generator: 'random',
                    src: 'data/faker.json',
                    map: function(element) {
                        return element.id;
                    }
                }, {
                    name: 'cycledSsn',
                    generator: 'cycle',
                    src: 'data/chance.json',
                    map: function(element) {
                        return element.ssn;
                    }
                }]
            }
        }
    }
});

Release History

  • 2016-04-07   v0.3.0   dependency update [email protected]
  • 2016-04-06   v0.2.7   dependency update / version bump
  • 2016-02-13   v0.2.6   dependency update / version bump
  • 2016-02-05   v0.2.5   dependency update / version bump
  • 2016-01-28   v0.2.4   dependency update / version bump
  • 2015-12-30   v0.2.3   dependency update / version bump
  • 2015-09-03   v0.2.2   lodash as hard dependency (instead of devDependency)
  • 2015-09-02   v0.2.1   repository name changed (github json-schema-faker organisation created) 0.2.0 version related config error fix
  • 2015-08-15   v0.2.0   dependency update / version bump [object Object]
  • 2015-07-13   v0.1.7   references option supported
  • 2015-06-25   v0.1.6   dependency update / version bump
  • 2015-06-24   v0.1.5   dependency update / version bump
  • 2015-06-07   v0.1.4   Moving ownership (user rename) tkoomzaaskz:ducin.
  • 2015-05-15   v0.1.3   Fixed missing file in v0.1.2.
  • 2015-05-15   v0.1.2   Deprecated. External sources support.
  • 2015-05-14   v0.1.1   Fixed test definitions. Updated json-schema-faker to 0.1.9. Allowing extending faker.js and chance.js, new test case.
  • 2015-05-08   v0.1.0   Initial version. Task working correctly. Testing 5 cases - faker, chance, array, integer and boolean. Travis CI integration.

Task submitted by Tomasz Ducin

This file was generated on Thu Apr 07 2016 19:21:15.

Bitdeli Badge