@stoplight/json
Useful functions when working with JSON.
- View the changelog: Releases
Installation
Supported in modern browsers and node.
# latest stable version
yarn add @stoplight/json
Usage
- parseWithPointers: Like
JSON.parse(val)
but also returns parsing errors as well as full ast with line information. - pathToPointer: Turns an array of path segments into a json pointer IE
['paths', '/user', 'get']
->#/paths/~1user/get
. - pointerToPath: Turns a json pointer into an array of path segments IE
#/paths/~1user/get
->['paths', '/user', 'get']
. - safeParse: Like
JSON.parse(val)
but does not throw on invalid JSON. - safeStringify: Like
JSON.stringify(val)
but handles circular references. - startsWith: Like native JS
x.startsWith(y)
but works with strings AND arrays. - trimStart: Like
lodash.startsWith(x, y)
but works with strings AND arrays. - getJsonPathForPosition: Computes JSON path for given position.
- getLocationForJsonPath: Retrieves location of node matching given JSON path.
Example parseWithPointers
import { parseWithPointers } from "@stoplight/json";
const result = parseWithPointers('{"foo": "bar"}');
console.log(result.data); // => the {foo: "bar"} JS object
console.log(result.pointers); // => the source map with a single "#/foo" pointer that has position info for the foo property
// basic example of getJsonPathForPosition and getLocationForJsonPath
import { getJsonPathForPosition, getLocationForJsonPath, parseWithPointers } from "@stoplight/json";
const result = parseWithPointers(`{
"hello": "world",
"address": {
"street": 123
}
}`);
const path = getJsonPathForPosition(result, { line: 3, character: 15 }); // line and character are 0-based
console.log(path); // -> ["address", "street"];
const position = getLocationForJsonPath(result, ["address"]);
console.log(position.range.start); // { line: 2, character: 13 } line and character are 0-based
console.log(position.range.end); // { line: 4, character: 3 } line and character are 0-based
Contributing
- Clone repo.
- Create / checkout
feature/{name}
,chore/{name}
, orfix/{name}
branch. - Install deps:
yarn
. - Make your changes.
- Run tests:
yarn test.prod
. - Stage relevant files to git.
- Commit:
yarn commit
. NOTE: Commits that don't follow the conventional format will be rejected.yarn commit
creates this format for you, or you can put it together manually and then do a regulargit commit
. - Push:
git push
. - Open PR targeting the
next
branch.