Skip to content

Repository files navigation

jsonifier

Dynamically generates JSON output from templates.

Build StatusCoverage Status

Build StatusCoverage Status

Installation

npm install --save-dev jsonifier

Usage

constjsonifier=require('jsonifier');letbase=newjsonifier().add('a.b.c',{'bob': ()=>'woot','countdown': function*count(){for(leti=4;i>0;i--){yieldi;}}});letchild=newjsonifier(base,{namespace: 'data'}).add({'sample_gen': function*sample(){letcycle=['start','middle','end'];while(true){yield*cycle;}},'normal': {1: ['a','b'],2: 'ok'}});

Calling jsonifier#build returns a generator

// This creates a generator>console.log(base.next().value);{a: {b: {c: {bob: 'woot',countdown: 4}}}}>letmax=4;>for(letdataofchild.build()){>console.log(data);>if(--max<=0)break;>}{a: {b: {c: {bob: 'woot',countdown: 4}}},data:
{sample_gen: 'start',normal: {'1': {'0': 'a','1': 'b'},'2': 'ok'}}}{a: {b: {c: {bob: 'woot',countdown: 3}}},data:
{sample_gen: 'middle',normal: {'1': {'0': 'a','1': 'b'},'2': 'ok'}}}{a: {b: {c: {bob: 'woot',countdown: 2}}},data:
{sample_gen: 'end',normal: {'1': {'0': 'a','1': 'b'},'2': 'ok'}}}{a: {b: {c: {bob: 'woot',countdown: 1}}},data:
{sample_gen: 'start',normal: {'1': {'0': 'a','1': 'b'},'2': 'ok'}}}

Constructor Options

  • namespace: [optional] decimal separated namespace. All objects JSONifier#add are nested in the namespace. E.g. 'a.b.c' => {'a': {'b': {'c': ... }}}

  • limit: [default: -1] maximum number of times the JSONifier#build generator will produce values

  • compiler: [optional] a function which is called to convert the internal state into a JSON object of static values.

Features

Inheritance

Concisely define data structures (useful for generating test data)

letchild=newjsonifier(base).add('a.b',{'d': function*(){yield*'What could this possibly do?';}}).add({a: {f: 'foo'}});letgen=child.build();>console.log(gen.next().value);>console.log(gen.next().value);>console.log(gen.next().value);{"a": {"b": {"d": "W"}}}{"a": {"b": {"d": "h"}}}{"a": {"b": {"d": "a"}}}

Respects order of addition

// Using child defined aboveletclean=newjsonifier(child).add({a: 'wooter',f: 'funk town'});>console.log(gen.next().value);{"a": {"b": {"d": "a"}}}>console.log(clean.next().value);{"a": "wooter","b": "funk town"}

Namespaces

letns=newjsonifier(clean,{namespace: 'woot'}).add({a: 1,b: 2});>console.log(ns.build().next());{"a": "wooter","b": "funk town","woot": {"a": 1,"b": 2}}

About

Dynamically generates JSON output from templates

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages