{"id":13652592,"url":"https://github.com/d3x0r/json6","last_synced_at":"2025-04-05T10:09:03.091Z","repository":{"id":41203529,"uuid":"97155712","full_name":"d3x0r/JSON6","owner":"d3x0r","description":"JSON for Humans (ES6)","archived":false,"fork":false,"pushed_at":"2021-10-18T05:27:24.000Z","size":424,"stargazers_count":232,"open_issues_count":7,"forks_count":14,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-06-10T00:44:45.943Z","etag":null,"topics":["javascript","json","json-parsing"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/d3x0r.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-07-13T18:58:56.000Z","updated_at":"2024-06-03T03:32:18.000Z","dependencies_parsed_at":"2022-08-25T07:20:51.320Z","dependency_job_id":null,"html_url":"https://github.com/d3x0r/JSON6","commit_stats":null,"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3x0r%2FJSON6","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3x0r%2FJSON6/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3x0r%2FJSON6/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d3x0r%2FJSON6/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/d3x0r","download_url":"https://codeload.github.com/d3x0r/JSON6/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247318745,"owners_count":20919484,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","json","json-parsing"],"created_at":"2024-08-02T02:01:00.770Z","updated_at":"2025-04-05T10:09:03.066Z","avatar_url":"https://github.com/d3x0r.png","language":"JavaScript","readme":"# JSON6 – JSON for Humans\n\n[![Build Status](https://travis-ci.com/d3x0r/JSON6.svg?branch=master)](https://travis-ci.com/d3x0r/JSON6)\n\n[![Join the chat at https://gitter.im/sack-vfs/json6](https://badges.gitter.im/sack-vfs/json6.svg)](https://gitter.im/sack-vfs/json6?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n*Documentation base cloned from JSON5 project https://github.com/json5/json5*\n\nJSON is an excellent data format, but can be better, and more expressive.\n\n**JSON6 is a proposed extension to JSON**  (Proposed here, noone, like em-discuss\nseemed to care about such a thing; prefering cryptic solutions like json-schema,\nor the 1000 pound gorilla solution).  It aims to make it easier for\n*humans to write and maintain* by hand. It does this by adding some minimal\nsyntax features directly from ECMAScript 6.\n\nJSON6 is a **superset of JavaScript**, although adds **no new data types**,\nand **works with all existing JSON content**. Some features allowed in JSON6\nare not directly supported by Javascript; although all javascript parsable\nfeatures can be used in JSON6, except functions or any other code construct,\ntransporting only data save as JSON.\n\nJSON6 is *not* an official successor to JSON, and JSON6 content may *not*\nwork with existing JSON parsers. For this reason, JSON6 files use a new .json6\nextension. *(TODO: new MIME type needed too.)*\n\nThe code is a **reference JavaScript implementation** for both Node.js\nand all browsers. It is a completly new implementation.\n\nOther related : [JSOX](https://github.com/d3x0r/jsox) JS Object Exchange format, which builds\nupon this and adds additional support for Date, BigNum, custom emissions,\nkeyword-less class defintitions;default initializers, data condensation,\nflexible user exensibility.\n\n\n## Why\n\nJSON isn’t the friendliest to *write*. Keys need to be quoted, objects and\narrays can’t have trailing commas, and comments aren’t allowed — even though\nnone of these are the case with regular JavaScript today.\n\nThat was fine when JSON’s goal was to be a great data format, but JSON’s usage\nhas expanded beyond *machines*. JSON is now used for writing [configs][ex1],\n[manifests][ex2], even [tests][ex3] — all by *humans*.\n\n[ex1]: http://plovr.com/docs.html\n[ex2]: https://www.npmjs.org/doc/files/package.json.html\n[ex3]: http://code.google.com/p/fuzztester/wiki/JSONFileFormat\n\nThere are other formats that are human-friendlier, like YAML, but changing\nfrom JSON to a completely different format is undesirable in many cases.\nJSON6’s aim is to remain close to JSON and JavaScript.\n\n\n## Features\n\nThe following is the exact list of additions to JSON’s syntax introduced by\nJSON6. **All of these are optional**, and **MOST of these come from ES5/6**.\n\n## Caveats\n\nDoes not include stringify, instead falling back to original (internal) JSON.stringify.\nThis will cause problems maintaining undefined, Infinity and NaN type values.\n\n### Summary of Changes from JSON5\n\nJSON6 includes all features of JSON5 plus the following.\n\n  - Keyword `undefined`\n  - Objects/Strings back-tick quoted strings (no template support, just uses same quote); Object key names can be unquoted.\n  - Strings - generous multiline string definition; all javascript character escapes work. \\(\\0, \\x##, \\u####, \\u\\{\\} \\)\n  - Numbers - underscore digit separation in numbers, octal `0o` and binary `0b` formats; all javascript number notations.\n  - Arrays - empty members\n  - Streaming reader interface\n  - (Twice the speed of JSON5; subjective)\n\n### Objects\n\n- Object keys can be unquoted if they do not have ':', ']', '[', '{', '}', ',', any quote or whitespace; keywords will be interpreted as strings.\n\n- Object keys can be single-quoted, (**JSON6**) or back-tick quoted; any valid string\n\n- Object keys can be double-quoted (original JSON).\n\n- Objects can have a single trailing comma. Excessive commas in objects will cause an exception. '{ a:123,,b:456 }' is invalid.\n\n[mdn_variables]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables\n\n### Arrays\n\n- Arrays can have trailing commas. If more than 1 is found, additional empty elements will be added.\n\n- (**JSON6**) Arrays can have comma ( ['test',,,'one'] ), which will result with empty values in the empty places.\n\n### Strings\n\n- Strings can be double-quoted (as per original JSON).\n\n- Strings can be single-quoted.\n\n- Strings can be back-tick (\\`) ([grave accent](https://en.wikipedia.org/wiki/Grave_accent)) -quoted.\n\n- Strings can be split across multiple lines; just prefix each newline with a\n  backslash. [ES5 [§7.8.4](http://es5.github.com/#x7.8.4)]\n\n- (**JSON6**) all strings will continue keeping every character between the start and end, this allows multi-line strings\n  and keep the newlines in the string; if you do not want the newlines they can be escaped as previously mentioned.\n\n- (**JSON5+?**) Strings can have characters emitted using 1 byte hex, interpreted as a utf8 codepoint `\\xNN`, 2 and only 2 hex digits must follow `\\x`; they may be 4 byte unicode characters `\\uUUUU`, 4 and only 4 hex digits must follow `\\u`; higher codepoints can be specified with `\\u{HHHHH}`, (where H is a hex digit) This is permissive and may accept a single hex digit between `{` and `}`.  All other standard escape sequeneces are also recognized.  Any character that is not recognized as a valid escape character is emitted without the leading escape slash ( for example, `\"\\012\"` will parse as `\"012\"`\n\n- (**JSON6**) The interpretation of newline is dynamic treating `\\r`, `\\n`, and `\\r\\n` as valid combinations of line ending whitespace.  The `\\` will behave approrpriately on those combinations.  Mixed line endings like `\\n\\r?` or `\\n\\r\\n?` are two line endings; 1 for newline, 1 for the \\r(follwed by any character), and 1 for the newline, and 1 for the \\r\\n pair in the second case.\n\n### Numbers\n\n- (**JSON6**) Numbers can have underscores separating digits '_' these are treated as zero-width-non-breaking-space. ([Proposal](https://github.com/tc39/proposal-numeric-separator) with the exception that \\_ can preceed or follow . and may be trailing.)\n\n- Numbers can be hexadecimal (base 16).  ( 0x prefix )\n\n- (**JSON6**) Numbers can be binary (base 2).  (0b prefix)\n\n- (**JSON6**) Numbers can be octal (base 8).  (0o prefix)\n\n- (**JSON6**) Decimal Numbers can have leading zeros.  (0 prefix followed by more numbers, without a decimal)\n\n- Numbers can begin or end with a (leading or trailing) decimal point.\n\n- Numbers can include `Infinity`, `-Infinity`,  `NaN`, and `-NaN`. (-NaN results as NaN)\n\n- Numbers can begin with an explicit plus sign.\n\n- Numbers can begin with multiple minus signs. For example '----123' === 123.\n\n### Keyword Values\n\n- (**JSON6**) supports 'undefined' in addition to 'true', 'false', 'null'.\n\n\n### Comments\n\n- Both inline (single-line using '//' (todo:or '#'?) ) and block (multi-line using \\/\\* \\*\\/ ) comments are allowed.\n  - `//` comments end at a `\\r` or `\\n` character; They MAY also end at the end of a document, although a warning is issued at this time.\n  - `/*` comments should be closed before the end of a document or stream flush.\n  - `/` followed by anything else other than `/` or `*` is an error.\n\n\n## Example\n\nThe following is a contrived example, but it illustrates most of the features:\n\n```js\n{\n\tfoo: 'bar',\n\twhile: true,\n\tnothing : undefined, // why not?\n\n\tthis: 'is a \\\nmulti-line string',\n\n\tthisAlso: 'is a\nmulti-line string; but keeps newline',\n\n\t// this is an inline comment\n\there: 'is another', // inline comment\n\n\t/* this is a block comment\n\t   that continues on another line */\n\n\thex: 0xDEAD_beef,\n\tbinary: 0b0110_1001,\n\tdecimal: 123_456_789,\n\toctal: 0o123,\n\thalf: .5,\n\tdelta: +10,\n\tnegative : ---123,\n\tto: Infinity,   // and beyond!\n\n\tfinally: 'a trailing comma',\n\toh: [\n\t\t\"we shouldn't forget\",\n\t\t'arrays can have',\n\t\t'trailing commas too',\n\t],\n}\n```\n\nThis implementation’s own [package.JSON6](package.JSON6) is more realistic:\n\n```js\n// This file is written in JSON6 syntax, naturally, but npm needs a regular\n// JSON file, so compile via `npm run build`. Be sure to keep both in sync!\n\n{\n\tname: 'JSON6',\n\tversion: '0.1.105',\n\tdescription: 'JSON for the ES6 era.',\n\tkeywords: ['json', 'es6'],\n\tauthor: 'd3x0r \u003cd3x0r@github.com\u003e',\n\tcontributors: [\n\t\t// TODO: Should we remove this section in favor of GitHub's list?\n\t\t// https://github.com/d3x0r/JSON6/contributors\n\t],\n\tmain: 'lib/JSON6.js',\n\tbin: 'lib/cli.js',\n\tfiles: [\"lib/\"],\n\tdependencies: {},\n\tdevDependencies: {\n\t\tgulp: \"^3.9.1\",\n\t\t'gulp-jshint': \"^2.0.0\",\n\t\tjshint: \"^2.9.1\",\n\t\t'jshint-stylish': \"^2.1.0\",\n\t\tmocha: \"^2.4.5\"\n\t},\n\tscripts: {\n\t\tbuild: 'node ./lib/cli.js -c package.JSON6',\n\t\ttest: 'mocha --ui exports --reporter spec',\n\t\t\t// TODO: Would it be better to define these in a mocha.opts file?\n\t},\n\thomepage: 'http://github.com/d3x0r/JSON6/',\n\tlicense: 'MIT',\n\trepository: {\n\t\ttype: 'git',\n\t\turl: 'https://github.com/d3x0r/JSON6',\n\t},\n}\n```\n\n\n## Community\n\nJoin the [Google Group](http://groups.google.com/group/JSON6) if you’re\ninterested in JSON6 news, updates, and general discussion.\nDon’t worry, it’s very low-traffic.\n\nThe [GitHub wiki](https://github.com/d3x0r/JSON6/wiki) (will be) a good place to track\nJSON6 support and usage. Contribute freely there!\n\n[GitHub Issues](https://github.com/d3x0r/JSON6/issues) is the place to\nformally propose feature requests and report bugs. Questions and general\nfeedback are better directed at the Google Group.\n\n\n## Usage\n\nThis JavaScript implementation of JSON6 simply provides a `JSON6` object just\nlike the native ES5 `JSON` object.\n\nTo use from Node:\n\n```sh\nnpm install json-6\n```\n\n```js\nvar JSON6 = require('json-6');\n```\n\nTo use in the browser (adds the `JSON6` object to the global namespace):\n\n```html\n\u003cscript src=\"node_modules/json-6/lib/json6.js\"\u003e\u003c/script\u003e\n```\n\nThen in both cases, you can simply replace native `JSON` calls with `JSON6`:\n\n```js\nvar obj = JSON6.parse('{unquoted:\"key\",trailing:\"comma\",}');\nvar str = JSON6.stringify(obj); /* uses JSON stringify, so don't have to replace */\n```\n\n|JSON6 Methods | parameters | Description |\n|-----|-----|-----|\n|parse| (string [,reviver]) | supports all of the JSON6 features listed above, as well as the native [`reviver` argument][json-parse]. |\n|stringify | ( value ) | converts object to JSON.  [stringify][json-stringify] |\n|escape | ( string ) | substitutes \", \\, ', and ` with backslashed sequences. (prevent 'JSON injection') |\n|begin| (cb [,reviver] ) | create a JSON6 stream processor.  cb is called with (value) for each value decoded from input given with write().  Optional reviver is called with each object before being passed to callback. |\n\n\n[json-parse]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse\n[json-stringify]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify\n\n### JSON6 Streaming\n\nA Parser that returns objects as they are encountered in a stream can be created.  `JSON.begin( dataCallback, reviver );`  The callback is called for each complete object in a stream of data that is passed.\n\n`JSON6.begin( cb, reviver )` returns an object with a few methods.\n\n| Method | Arguments | Description |\n|:---|:---|:---|\n| write | (string) | Parse string passed and as objects are found, invoke the callback passed to `begin()` Objects are passed through optional reviver function passed to `begin()`. |\n| \\_write | (string,completeAtEnd) | Low level routine used internally.  This does the work of parsing the passed string. Returns 0 if no object completed, 1 if there is no more data, and an object was completd, returns 2 if there is more data and a parsed object is found.  if completedAtEnd is true, dangling values are returned, for example \"1234\" isn't known to be completed, more of the number might follow in another buffer; if completeAtEnd is passed, this iwll return as number 1234.  Passing empty arguments steps to the next buffered input value. |\n| value | () | Returns the currently completed object.  Used to get the completed object after calling \\_write. |\n| reset | () | If `write()` or `\\_write()` throws an exception, no further objects will be parsed becuase internal status is false, this resets the internal status to allow continuing using the existing parser.  ( May require some work to actually work for complex cases) |\n\n\n```js\n\t// This is (basically) the internal loop that write() uses.\n\tvar result\n\tfor( result = this._write(msg,false); result \u003e 0; result = this._write() ) {\n\t\tvar obj = this.value();\n\t\t// call reviver with (obj)\n\t\t// call callback with (obj)\n\t}\n```\n\n```js\n// Example code using write\nfunction dataCallback( value ) {\n\tconsole.log( \"Value from stream:\", value );\n}\nvar parser = JSON.begin( dataCallback );\n\nparser.write( '\"Hello ' );   // a broken simple value string, results as 'Hello World!'\nparser.write( 'World!\"' );\nparser.write( '{ first: 1,' );   // a broken structure\nparser.write( ' second : 2 }' );\nparser.write( '[1234,12');  // a broken array across a value\nparser.write( '34,1234]');\nparser.write( '1234 456 789 123 523');  // multiple single simple values that are numbers\nparser.write( '{a:1} {b:2} {c:3}');  // multiple objects\n\nparser.write( '1234' );  // this won't return immediately, there might be more numeric data.\nparser.write( '' ); // flush any pending numbers; if an object or array or string was split, throws an error; missing close.\n\nparser.write( '1234' );\nparser.write( '5678 ' );  // at this point, the space will flush the number value '12345678'\n\n```\n\n\n\n### Extras\n\nIf you’re running this on Node, you can also register a JSON6 `require()` hook\nto let you `require()` `.json6` files just like you can `.json` files:\n\n```js\nrequire('JSON-6/lib/require');\nrequire('./path/to/foo');   // tries foo.json6 after foo.js, foo.json, etc.\nrequire('./path/to/bar.json6');\n```\n\nThis module also provides a `json6` executable (requires Node) for converting\nJSON6 files to JSON:\n\n```sh\njson6 -c path/to/foo.json6\t# generates path/to/foo.json\n```\n\n## Other Implementations\n\nThis is also implemented as part of npm [sack.vfs https://www.npmjs.com/package/sack.vfs]\nas a native code node.js addon.  This native javascript version allows usage in browsers.\n\n## Benchmarks\n\nThis is as fast as the javascript version of Douglas Crockford's reference implementation [JSON\nimplementation][json_parse.js] for JSON parsing.\n\nThis is nearly double the speed of [JSON5 http://json5.org] implementation that inspired this (which is half the speed of Crockford's reference implementation).\n\nThis is half the speed of the sack.vfs native C++ node addon implementation (which itself is half the speed of V8's native code implementation, but they can cheat and build strings directly).\n\n## Requirements\n\nCurrently `engines` is set for Node 10 or higher.\n\nHowever, `let`, `const`, and new unicode string support for codepoints\n(like `codePointAt`), are the most exotic of features used by the library.\n\nTests may include arrow functions.\n\nFor development purposes, this is tooled to always use the latest build\ntools, which require a minimum platform of their own.\n\nExternal development dependencies\n - rollup - for packaging and minification\n   - various rollup support plugins\n - eslint - for checking best practices and code styling\n - acorn - a peer dep. required through eslint\n - mocha (^3) - automated internal test suite\n   - chai - enable expect syntax in tests\n - nyc - coverage testing; make sure there's a good reason for having things 😸\n - core-js - polyfill unicode string support\n\n## Development\n\n```sh\ngit clone https://github.com/d3x0r/json6\ncd json6\nnpm install\nnpm test\n```\n\nAs the `package.json6` file states, be sure to run `npm run build` on changes\nto `package.json6`, since npm requires `package.json`.\n\nFeel free to [file issues](https://github.com/d3x0r/json6/issues) and submit\n[pull requests](https://github.com/d3x0r/JSON6/pulls) — contributions are\nwelcome. If you do submit a pull request, please be sure to add or update the\ntests, and ensure that `npm test` continues to pass.\n\n## Continuous Integration Testing\n\nTravis CI is used to automatically test the package when pushed to github. Recently .mjs tests have been\nadded, and rather than 1) build a switch to test `mocha/test/*.js`  instead of just `*`, and 2) depending on node version\nswitch the test command which is run, the older platforms were removed from testing.\n\nThe product of this should run on very old platforms also, especially `node_modules/json-6/dist/index.min.js`.\n\n\n## Changelog\n\n- 1.1.5(pre)\n- 1.1.4\n    - fixes benchmark test for hex number conversion\n- 1.1.3\n    - fixes '\\v' decoding.\n    - fixes parsing hex numbers with a-f.\n- 1.1.2\n    - Updated document about CI tests.\n    - added tests from sack.vfs JSON6 updates.\n- 1.1.1\n  - Added stringifier\n     - emits unquoted object field names, if valid to be unquoted.\n     - emits Infinity\n     - emits NaN\n  - Added forgiving '+' collection for numbers.\n  - Improved(implemented) node module loader interface `lib/import.mjs` which enables `.json6` extension for import.\n- 1.0.8\n  - throw error when streaming, and an error is encountered, persist throwing on new writes.\n- 1.0.7\n  - Remove octal string escapes (Only overly clever people use those?)\n  - Add \\0 literal escape.\n  - removed leading 0 octal interpretation.\n  - fix trailing comma handling\n  - clarify error reporting\n  - Coverage completion\n  - improve error tests\n  - integrate with Travis.\n- 1.0.6\n  - Remove leading 0 octal interpretation; code reformats, test framework improvements.\n  - Implement automated mocha tests; fixed several edge cases\n  - Comments that are open at the end of a document (stream flush), will throw an error; they should be closed with an end of line or `*/` as appropriate.\n  - keywords are accepted as unquoted strings for object field names.\n  - Improved error reporting for incomplete escape sequeneces at the end of strings.\n- 1.0.5 - Add interpretation of `nbsp` (codepoint 0xa0); (In the spirit of 'human readable') A 'visible' whitespace is treated as a whitespace.\n- 1.0.4 - error publishing (bump to republish)\n- 1.0.3\n   - Fix clearing negative flag used with NaN.\n   - update build products to produce an esm module.\n- 1.0.2 - Udate in Readme updated.\n- 1.0.1 - Fix homepage reference.\n- 1.0.0 - Fix bug reading surrogate pairs, and error with \u003e 65k buffers.  Release 1.0.  I don't see this changing beyond the current functionality.\n- 0.1.127 - Fix bad shift/unshift/pop methods.\n- 0.1.126 - Fix handling very wide characters.  Improved number parsing speed.  Fix string character escapes.  Update documentation to include '0o' prefix for numbers.\n- 0.1.125 - Fix some `let`s that were causing deoptimization\n- 0.1.123 - Fix `npm install json-6` in readme.  Remove dev dependancies that aren't used.  Fix #8 Wierd arrays [test](./tests/json6TestObjectArray.js)\n- 0.1.122 - Fix referencing `val.negative` that should be just `negative`.\n- 0.1.121 - Optimization; use `Number()` instead of `new Number()`\n- 0.1.120 - If a non-string is passed to parse, convert to a string using String(msg).\n- 0.1.119 - standardize errors; fix negative sign for -Infinity.\n- 0.1.118 - Fix \"use strict\" undefined variables string_status and exponent_digit. Issue #4.\n- 0.1.117 - documentation and license updates. (Issue #3)\n- 0.1.116 - Updated docs; Fixed stream parse issue with numbers.\n- 0.1.115 - Fix object key names with spaces being accepted.  Fix number parsing to be more strict.\n- 0.1.114 - Fix true/false values.\n- 0.1.113 - documentation update fix.\n- 0.1.112 - fix streaming error at end of string, and values in some circumstances.\n- 0.1.111 - fix packaging error.\n- 0.1.110 - fix empty elements in arrays.  `[,]` = `[\u003cempty item\u003e]` not `[undefined]`. improve test.\n- 0.1.109 - fix redundant result with certain buffers.\n- 0.1.108 - rename 'add' to 'write' for compatibilty with other sack.vfs JSON6 parser.\n- 0.1.107 - fix variable used for gathering Strings that caused permanent error\n- 0.1.106 - fix handling whitespace after keyword\n- 0.1.105 - Add a streaming interface.\n- 0.1.104 - Readme updates.\n- 0.1.103 - Add underscore as a zero-space-non-breaking-whitespace for numbers.\n\n\n## License\n\nMIT. See [LICENSE.md](./LICENSE.md) for details.\n\n\n## Credits\n\n(http://github.com/json5/json5)  Inspring this project.\n\n[json_parse.js]: https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js\n","funding_links":[],"categories":["Format Extensions"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd3x0r%2Fjson6","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fd3x0r%2Fjson6","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd3x0r%2Fjson6/lists"}