# 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.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