@jsonic/jsonic-next
v2.14.0
Published
A dynamic JSON parser that isn't strict and can be customized.
Downloads
23,802
Maintainers
Readme
jsonic
NOTE: PREVIEW VERSION OF NEXT RELEASE
A JSON parser for JavaScript that isn't strict. Also, it's very very extensible.
a:1,foo:bar
→ {"a": 1, "foo": "bar"}
Site | Docs | FP Guide | Contributing | Wiki | Code of Conduct | Twitter | Chat
Quick start
Install:
> npm install jsonic
Node.js:
const Jsonic = require('jsonic')
console.log(Jsonic('a:b')) // prints {a:'b'}
TypeScript:
import { Jsonic } from 'jsonic'
console.log(Jsonic('a:b')) // prints {a:'b'}
Browser:
<script src="jsonic.min.js"></script>
<script>
console.log(Jsonic('a:b')) // prints {a:'b'}
</script>
(Although in the real world you'll probably be packaging jsonic as a dependency with webpack or similar.)
What can jsonic do?
All of the examples below parse beautifully to {"a": 1, "b": "B"}
.
short and sweet
a:1,b:B
no commas, no problem
a:1
b:B
comments are cool
a:1
// a:2
# a:3
/* b wants
* to B
*/
b:B
strings and things
{ "a": 100e-2, '\u0062':`\x42`, }
The syntax of jsonic is just easy-going JSON:
- simple no-quotes-needed property names:
{a:1}
→{"a": 1}
- implicit top level (optional):
a:1,b:2
→{"a": 1, "b": 2}
,a,b
→["a", "b"]
- graceful trailing commas:
a:1,b:2,
→{"a": 1, "b": 2}
,a,b,
→["a", "b"]
- all the number formats:
1e1 === 0xa === 0o12 === 0b1010
But that is not all! Oh, no. That is not all...
This:
# Merge, baby, merge!
cat: { hat: true }
cat: { fish: null }
cat: who: ['sally', 'me']
# Who needs quotes anyway?
holds up: [
cup and a cake,
`TWO books!
the fish!`,
'''
ship!
dish!
ball!
'''
]
}
parses into this:
{
"cat": {
"hat": true,
"fish": null,
"who": ["sally","me"]
},
"holds up": [
"cup and a cake",
"TWO books!\n the fish!",
"ship!\ndish!\nball!"
]
}
Meaning you also get:
- quotes can be single or double ':
'a',"b"
→['a', 'b']
- quotes are optional, even with spaces:
{a: cup cake }
→{"a": "cup cake"}
- object merging:
a:{b:1},a:{c:2}
→{"a": {"b": 1, "c": 2}}
- object construction:
a:b:1,a:c:2
→{"a": {"b": 1, "c": 2}}
- multi-line strings:
`a
b`
→ "a\nb"
- indent-adjusted strings:
'''
a
b
'''
→ "a\nb"
And we haven't even begun to talk about all the fun stuff you can do with options and plugins, including support for multiple files, CSV (or TSV), and dynamic content.
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
Usage
Breaking Changes
- unterminated strings?