* [Full documentation](https://taskcluster.github.io/json-e) # JSON-e JSON-e is a data-structure parameterization system for embedding context in JSON objects. The central idea is to treat a data structure as a "template" and transform it, using another data structure as context, to produce an output data structure. There are countless libraries to do this with strings, such as [mustache](https://mustache.github.io/). What makes JSON-e unique is that it operates on data structures, not on their textual representation. This allows input to be written in a number of formats (JSON, YAML, etc.) or even generated dynamically. It also means that the output cannot be "invalid", even when including large chunks of contextual data. JSON-e is also designed to be safe for use on untrusted data. It never uses `eval` or any other function that might result in arbitrary code execution. It also disallows unbounded iteration, so any JSON-e rendering operation will finish in finite time. ## Changes See [CHANGELOG.rst](https://github.com/taskcluster/json-e/blob/master/CHANGELOG.rst) for the changes in each version of this library. # Interface ## JavaScript The JS module is installed with either of ```shell npm install --save json-e yarn add json-e ``` The module exposes following interface: ```javascript import jsone from 'json-e'; var template = {a: {$eval: "foo.bar"}}; var context = {foo: {bar: "zoo"}}; console.log(jsone(template, context)); // -> { a: 'zoo' } ``` Note that the context can contain functions, and those functions can be called from the template: ```javascript var template = {$eval: "foo(1)"}; var context = {"foo": function(x) { return x + 2; }}; console.log(jsone(template, context)); // -> 3 ``` *NOTE*: Context functions are called synchronously. Any complex asynchronous operations should be handled before rendering the template. *NOTE*: If the template is untrusted, it can pass arbitrary data to functions in the context, which must guard against such behavior. ### Browser JSON-e is distributed as a CommonJS package is not designed to be included directly in a browser with `