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"
'''
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.
Table of Contents
-
About The Project
-
Getting Started
- Usage
- Roadmap
- Contributing
- License
- Contact
- Acknowledgements
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