Process operations on pure JSON objects.
JSONSharp.process clones an object and processes operations returning a
modified object.
Operations are simple objects with a single property representing its name.
The operation name should be preceded by the # (sharp) symbol to avoid
conflicts with real data.
The property value is processed by the operation logic using a given context.
Some systems need slightly different configuration between environments and contexts. This technique allows to have a good degree of reuse with a simple format.
Given the following object and context:
var config = {
    '#merge': [
        {debug: true, url: 'http://localhost'},
        {
            '#switch': {
                '#property': 'env',
                '#case': {
                    dev: {
                        url: 'http://dev.com/'
                    },
                    prod: {
                        url: 'http://prod.com/',
                        debug: false
                    }
                }
            }
        }
    ]
};
var context = {
    env: 'dev'
};
var devConfig = require('JSONSharp').process(config, context);Results in the following devConfig object:
{
    debug: true, // Debug flag inherited from merging with the defaults
    url: 'http://dev.com/' // Url is replaced
}The #merge operation takes a list of objects and deeply merges its properties
using the deepmerge library.
Examples:
JSONSharp.process({'#merge': [{a: 'a'}, {b: 'b']}, {});
// ==> {a: 'a', b: 'b'}The #switch operation works much like the switch Javascript statement, with the exception that it doesn't
use a break statement.
It takes an object with the following properties:
#property: the property name orJSONPathto be matched for results#case: an object mapping#propertyvalues to desired results#case.#default: the value will be used if no matching value is found
Examples:
var switchObj = {
    '#switch': {
        '#property': 'name',
        '#case': {a: 'Prop A', '#default': 'not found'}
    }
};
JSONSharp.process(switchObj, {});
// ==> "not found"
JSONSharp.process(switchObj, {name: 'a'});
// ==> "Prop A"
JSONSharp.process(switchObj, {name: '$.a'});
// ==> "Prop A"A #property starting with $. will be resolved using the
JSONPath library, otherwise simple
property access will be used.
