@vibl/jsonata
v1.7.2
Published
JSON query and transformation language
Downloads
6
Maintainers
Readme
JSONata with COW cloning for the Transform operator
This package is forked from https://github.com/jsonata-js/jsonata.
In the original JSONata package, the Transform operator (... ~> | ... | ... |) deep clones the input object, which can be very costly in memory, in GC resources and in deep equality checking afterwards (e.g. for React components with a Redux store transform
ed with JSONata in reducers).
In this package, the Transform operator does copy-on-write cloning, which means it only clones the "lineage" of the transformed values (i.e. the parents of the transformed values, up to the root input object). It does not mutate any object in the process.
Caveats:
- It does NOT work when the location pattern includes a descendant (**) operator.
- The
head
part (before the~>
) should only be$
, i.e. the root element. So, the whole expression should always start withjsonata("$ ~> |...
.
Installation
npm install @vibl/jsonata
Below is the original README of the JSONata package:
JSONata
JSON query and transformation language
Reference implementation of the JSONata query and transformation language.
Quick start
In Node.js:
var jsonata = require("jsonata");
var data = {
example: [
{value: 4},
{value: 7},
{value: 13}
]
};
var expression = jsonata("$sum(example.value)");
var result = expression.evaluate(data); // returns 24
In a browser:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSONata test</title>
<script src="https://cdn.jsdelivr.net/npm/jsonata/jsonata.min.js"></script>
<script>
function greeting() {
var json = JSON.parse(document.getElementById('json').value);
var result = jsonata('"Hello, " & name').evaluate(json);
document.getElementById('greeting').innerHTML = result;
}
</script>
</head>
<body>
<textarea id="json">{ "name": "Wilbur" }</textarea>
<button onclick="greeting()">Click me</button>
<p id="greeting"></p>
</body>
</html>
More information
- JSONata documentation
- JavaScript API
- Intro talk at London Node User Group
- JSONata tech talk
Contributing
See the CONTRIBUTING.md for details of how to contribute to this repo.