2.12.1 • Published 9 months ago

@jsonic/jsonic-next v2.12.1

Weekly downloads
-
License
MIT
Repository
github
Last release
9 months ago

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

npm version dependencies Status

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?
2.12.1

9 months ago

2.11.0

9 months ago

2.12.0

9 months ago

2.10.0

1 year ago

2.9.1

1 year ago

2.7.0

1 year ago

2.9.0

1 year ago

2.8.0

1 year ago

2.6.0

1 year ago

2.5.4

1 year ago

2.5.3

1 year ago

2.4.3

2 years ago

2.4.2

2 years ago

2.3.0

2 years ago

2.2.0

2 years ago

2.1.0

2 years ago

2.0.2

2 years ago

2.0.1

2 years ago