Parse a string using default settings. Jsonic is both a callable function
and a namespace for the API below.
const { Jsonic } = require('jsonic')
Jsonic('a:1') // {"a": 1}The optional meta parameter passes arbitrary data through to plugins and
rule actions.
A configured instance is also directly callable.
const j = Jsonic.make({ comment: { lex: false } })
j('a:1') // {"a": 1}Create a new parser instance with the given options. Unset options fall back to defaults. Returns a callable instance with the full API.
const strict = Jsonic.make({
comment: { lex: false },
text: { lex: false }
})The options parameter can also be a string shortcut:
'json'-- strict JSON parser (only JSON-tagged grammar rules)'jsonic'-- minimal jsonic parser
Create an empty parser with no grammar or defaults. Used as a base for building custom parsers from scratch.
Direct access to the current options object.
When called as a function, deep-merges changes into the options and returns
the result. Does not modify the instance in-place (use make() for that).
Returns a deep copy of the internal configuration. This is the resolved, compiled form of the options -- useful for debugging.
Access or modify grammar rules.
rule()-- returns the full rule spec maprule(name)-- returns the rule spec fornamerule(name, definer)-- callsdefiner(ruleSpec)to modify the rule
Each rule spec has open and close alternate lists, plus state actions
(bo, bc, ao, ac) for before/after open/close phases.
jsonic.rule('val', (rs) => {
rs.open.unshift({
s: [[myToken]],
a: (rule) => { rule.node = 'custom' }
})
})Get or create a token type. ref is a string name (e.g., '#OB' for open
brace). When called with a second argument mapping to a source character, it
registers a new fixed token.
const T_TILDE = jsonic.token('#TL', '~')Get a named token set. Built-in sets: 'IGNORE' (space, line, comment),
'VAL' (text, number, string, value), 'KEY'.
Get the fixed token mapping (source characters to token types).
Register and execute a plugin. The plugin function receives the jsonic instance and the options object.
jsonic.use(myPlugin, { key: 'value' })Plugins are re-applied when deriving child instances.
Subscribe to lex and/or rule events.
lex(token, rule, ctx)-- fires after each token is lexedrule(rule, ctx)-- fires before each rule processing step
jsonic.sub({
lex: (token, rule, ctx) => {
console.log('token:', token)
}
})A collection of helper functions for plugin authors:
tokenize-- convert token names to Tin numbersdeep-- deep merge objectsclone-- deep cloneregexp-- safe regex constructionsrcfmt-- format source strings for displaycharset-- build character setserrmsg,strinject-- error message helpersprop,keys,values,entries,omap-- object utilitiestrimstk,makelog,clean,str,mesc,escre-- misc helpers
Step constants used in rule definitions and state actions.
Parsing errors throw a JsonicError with:
| Property | Description |
|---|---|
code |
Error code ('unexpected', 'unterminated_string', etc.) |
detail |
Human-readable message |
pos |
0-based character position |
row |
1-based line number |
col |
1-based column number |
src |
Source fragment at the error |
The main module exports:
| Export | Description |
|---|---|
Jsonic |
Main parser (callable + API) |
JsonicError |
Error class |
Parser |
Parser class |
makeLex, makeParser |
Factory functions |
makeToken, makePoint, makeRule, makeRuleSpec |
Internal constructors |
makeFixedMatcher, makeSpaceMatcher, makeLineMatcher |
Lexer matchers |
makeStringMatcher, makeCommentMatcher, makeNumberMatcher, makeTextMatcher |
Lexer matchers |
OPEN, CLOSE, BEFORE, AFTER, EMPTY |
Step constants |
util |
Utility functions |
make |
Alias for Jsonic.make |