# mojangson

> A mojangson parser written in node.js

Latest version **2.1.0** (published 2026-08-27) · MIT license · 0 weekly downloads

## Install

```sh
npm install mojangson
pnpm add mojangson
yarn add mojangson
bun add mojangson
```

## Health

**Score 60/100 (C)** — status: active.

Positive: no vulnerabilities; has provenance; recently updated; high maintenance score.

Warnings: low downloads; no types; no esm support.

## Facts

| | |
|---|---|
| Version | 2.1.0 |
| Published | 2026-08-27 |
| First published | 2016-01-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 61.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 22 |
| Author | Romain Beaumont |
| Maintainers | rom1504 |
| Keywords | mojangson |

## Links

- npm: https://www.npmjs.com/package/mojangson
- Repository: https://github.com/PrismarineJS/node-mojangson
- Homepage: https://github.com/PrismarineJS/node-mojangson#readme
- Issues: https://github.com/PrismarineJS/node-mojangson/issues
- npm.io page: https://npm.io/package/mojangson

## Dependencies (1)

- [nearley](https://npm.io/package/nearley.md) ^2.19.5

## Recent versions

- 2.1.0 (latest) — 2026-08-27
- 2.0.4 — 2023-06-03
- 2.0.3 — 2023-06-03
- 2.0.2 — 2021-07-06
- 2.0.1 — 2021-06-29
- 2.0.0 — 2021-02-20
- 1.1.1 — 2020-10-03
- 1.1.0 — 2020-08-12
- 1.0.0 — 2020-07-31
- 0.2.4 — 2019-11-17
- 0.2.3 — 2016-02-08
- 0.2.2 — 2016-01-10
- 0.2.1 — 2016-01-09
- 0.2.0 — 2016-01-09

## README

# node-mojangson
[![NPM version](https://badge.fury.io/js/mojangson.svg)](http://badge.fury.io/js/mojangson) ![CI](https://github.com/PrismarineJS/node-mojangson/workflows/CI/badge.svg)

node-mojangson is a mojangson parser.

## Mojangson specification
Mojangson is mojang's variant of json. It is basically json with the following changes :

 * array can be indexed (example : `[0:"v1",1:"v2",2:"v3"]`)
 * array and object can have trailing comma (example : `[5,4,3,]` and `{"a":5,"b":6,}`)
 * there can be string without quote (example : `{mykey:myvalue}`)
 * numbers can be suffixed by b, s, l, f, d, i or the same in upper case (example : `{number:5b}`)
 * mojangson stays a superset of json : every json is a mojangson

 Reference https://minecraft.gamepedia.com/Commands#Data_tags

## Parser
This parser is build using nearley.

See the [grammar](grammar.ne) and the examples in the [test](test/test.js) for more information.

## Usage
Usage example :

```js
const mojangson = require('mojangson')

const data = mojangson.parse('{mykey:myvalue}')

// print the parsed data
console.log(data)

// print the simplified data
condole.log(mojangson.simplify(data))
```

The provided method `mojangson.parse` return a javascript object corresponding to the mojangson passed in input.

`mojangson.simplify` returns a simplified representation : keep only the value to remove one level. This loses the types so you cannot use the resulting representation to write it back.

`mojangson.stringify` will take a js object with types and values for mojangson and make it into a normalized mojangson string

```js
const mojangson = require('mojangson')
const data = mojangson.stringify({ type: 'list', value: { type: 'string', value: [ 'z1', 'z2' ] } })
console.log(data) // => [z1,z2]
```

Another example, the provided method `mojangson.normalize` takes a string of mojangson and normalizes it in the shortest way to retain all data. Comparing it to the original will tell you if you have the shortest equivalent to a string of mojangson.

```js
const mojangson = require('mojangson')
const original = '[0:"z1",1:"z2"]'
const data = mojangson.normalize(original)
console.log(data) // => [z1,z2]
const optimized = original === data
console.log(optimized) // => false
```


## History

### 2.1.0
* [Fix parser failure on whitespace before closing brace (#57)](https://github.com/PrismarineJS/node-mojangson/commit/e107e605553de62301002ac5d6b8575f5647a4ca) (thanks @Copilot)
* [Fix simplify() to fully unwrap byteArray, intArray, and longArray (#54)](https://github.com/PrismarineJS/node-mojangson/commit/7482d623c9199bf8a582fb723d1d598d4feba938) (thanks @Copilot)
* [Add support for single-quoted strings in mojangson parser (#53)](https://github.com/PrismarineJS/node-mojangson/commit/fa153c7b626f51303810fde805d3f62a14974a98) (thanks @Copilot)
* [node 22 (#51)](https://github.com/PrismarineJS/node-mojangson/commit/8526165d95483002dbcdab09391196a0a3a1a543) (thanks @rom1504)

### 2.0.4

* fix publish

### 2.0.3

* Fix simplifying of arrays throwing error (@Lianecx)
* Escape new lines in text (@U9G)

### 2.0.2

* fixes issue where strings starting with a number would be parsed as a number (@U9G)

### 2.0.1

* fix escaping some chars in mojangson.stringify (@U9G)
* update grammar for unicode escaped strings (@U9G)
* fix parsing of escaped characters (@Majorblake)

### 2.0.0

* Changes output format to include types (@Karang)
* add simplify function
* Add stringify function to go back to mojangson (@U9G)

### 1.1.1

* Fix empty string parsing (thanks @IdanHo)

### 1.1.0

* switch to nearley parser for a better handling for mojangson (thanks @Karang)

### 1.0.0

* stop printing error

### 0.2.4

* add support for double and int

### 0.2.3

* fix release about grammar.js still containing the cli

### 0.2.2

* disable jison cli to make mojangson compatible with browserify

### 0.2.1

* fix state conflict due to recent trailing comma fix

### 0.2.0

* Rename npm package to mojangson
* fix trailing comma in arrays

### 0.1.1

* better error displaying

### 0.1

* First release, basic functionality

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