# @stoplight/json

> Useful functions when working with JSON.

Latest version **3.21.7** (published 2024-09-02) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install @stoplight/json
pnpm add @stoplight/json
yarn add @stoplight/json
bun add @stoplight/json
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 3.21.7 |
| Published | 2024-09-02 |
| First published | 2018-07-30 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=8.3.0 |
| Dependencies | 6 |
| Unpacked size | 53.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 31 |
| Author | Stoplight |
| Maintainers | stoplight-devops |
| Keywords | json, json parser, json.parse, parser, sourcemap |

## Links

- npm: https://www.npmjs.com/package/@stoplight/json
- Repository: https://github.com/stoplightio/json
- Homepage: https://github.com/stoplightio/json#readme
- Issues: https://github.com/stoplightio/json/issues
- npm.io page: https://npm.io/package/@stoplight/json

## Dependencies (6)

- [lodash](https://npm.io/package/lodash.md) ^4.17.21
- [jsonc-parser](https://npm.io/package/jsonc-parser.md) ~2.2.1
- [@stoplight/path](https://npm.io/package/@stoplight/path.md) ^1.3.2
- [@stoplight/types](https://npm.io/package/@stoplight/types.md) ^13.6.0
- [safe-stable-stringify](https://npm.io/package/safe-stable-stringify.md) ^1.1
- [@stoplight/ordered-object-literal](https://npm.io/package/@stoplight/ordered-object-literal.md) ^1.0.3

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 3.21.7 (latest) — 2024-09-02
- 0.0.37-beta.1 (next) — 2018-08-17
- 3.21.6 — 2024-08-02
- 3.21.5 — 2024-07-31
- 3.21.4 — 2024-07-23
- 3.21.3 — 2024-07-18
- 3.21.1 — 2024-07-18
- 3.21.0 — 2023-05-23
- 3.20.3 — 2023-05-19
- 3.20.2 — 2023-02-09
- 3.20.1 — 2022-08-05
- 3.20.0 — 2022-08-05
- 3.19.0 — 2022-08-04
- 3.18.1 — 2022-04-15
- 3.18.0 — 2022-03-29
- … 92 more at https://npm.io/package/@stoplight/json/versions

## README

# @stoplight/json

[![Maintainability](https://api.codeclimate.com/v1/badges/85d2215f8b1e8a15214f/maintainability)](https://codeclimate.com/github/stoplightio/json/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/85d2215f8b1e8a15214f/test_coverage)](https://codeclimate.com/github/stoplightio/json/test_coverage)

Useful functions when working with JSON.

- View the changelog: [Releases](https://github.com/stoplightio/json/releases)

### Installation

Supported in modern browsers and node.

```bash
# latest stable version
yarn add @stoplight/json
```

### Usage

- **[parseWithPointers](https://stoplightio.github.io/json/globals.html#parsewithpointers)**: Like `JSON.parse(val)` but also returns parsing errors as well as full ast with line information.
- **[pathToPointer](https://stoplightio.github.io/json/globals.html#pathtopointer)**: Turns an array of path segments into a json pointer IE `['paths', '/user', 'get']` -> `#/paths/~1user/get`.
- **[pointerToPath](https://stoplightio.github.io/json/globals.html#pointertopath)**: Turns a json pointer into an array of path segments IE `#/paths/~1user/get` -> `['paths', '/user', 'get']`.
- **[safeParse](https://stoplightio.github.io/json/globals.html#safeparse)**: Like `JSON.parse(val)` but does not throw on invalid JSON.
- **[safeStringify](https://stoplightio.github.io/json/globals.html#safestringify)**: Like `JSON.stringify(val)` but handles circular references.
- **[startsWith](https://stoplightio.github.io/json/globals.html#startswith)**: Like native JS `x.startsWith(y)` but works with strings AND arrays.
- **[trimStart](https://stoplightio.github.io/json/globals.html#trimstart)**: Like `lodash.startsWith(x, y)` but works with strings AND arrays.
- **[getJsonPathForPosition](https://stoplightio.github.io/json/globals.html#getjsonpathforposition)**: Computes JSON path for given position.
- **[getLocationForJsonPath](https://stoplightio.github.io/json/globals.html#getlocationforjsonpath)**: Retrieves location of node matching given JSON path.

#### Example `parseWithPointers`

```ts
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
```

```ts
// 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

1. Clone repo.
2. Create / checkout `feature/{name}`, `chore/{name}`, or `fix/{name}` branch.
3. Install deps: `yarn`.
4. Make your changes.
5. Run tests: `yarn test.prod`.
6. Stage relevant files to git.
7. Commit: `yarn commit`. _NOTE: Commits that don't follow the [conventional](https://github.com/marionebl/commitlint/tree/master/%40commitlint/config-conventional) format will be rejected. `yarn commit` creates this format for you, or you can put it together manually and then do a regular `git commit`._
8. Push: `git push`.
9. Open PR targeting the `next` branch.

---
_Source: https://npm.io/package/@stoplight/json · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
