Splits an object literal string into a set of top-level key-value pairs
npm install object-literal-parseparseObjectLiteral(str) that accepts an object literal string (with or without enclosing braces) and returns an array of key-value string pairs. The key are strings, but unquoted keys are accepted as long as they don't contain these special characters: ,:()[]{}'"/. The value is any valid Javascript expression; the parser will return it as a string (without evaluating it).
parseObjectLiteral("a: 1, b: 2, \"quotedKey\": 3, 'aposQuotedKey': 4");
`
`
[ ["a","1"], ["b","2"], ["quotedKey","3"], ["aposQuotedKey","4"] ]
`
* With enclosing braces
`
parseObjectLiteral("{a: 1}");
`
`
[ ["a","1"] ]
`
* String values
`
parseObjectLiteral(
"a: \"comma, colon: brace{ bracket[ apos' escapedQuot\\\" end\","
+ "b: 'escapedApos\\' brace} bracket] quot\"'");
`
`
[
["a","\"comma, colon: brace{ bracket[ apos' escapedQuot\\\" end\""],
["b","'escapedApos\\' brace} bracket] quot\"'"]
]
`
* Values with objects, arrays, function literals, and regular expressions
`
parseObjectLiteral(
"myObject:{someChild:{}, someChildArray:[1,2,3], \"quotedChildProp\":'string value'},\n"
+ "someFn:function(a,b,c){var regex=/}/g;var str='/})({';return{};},"
+ "myArray:[{}, function(){}, \"my'Str\", 'my\"Str']"
);
`
`
[
["myObject","{someChild:{},someChildArray:[1,2,3],\"quotedChildProp\":'string value'}"],
["someFn","function(a,b,c){var regex=/}/g;var str='/})({';return{};}"],
["myArray","[{},function(){},\"my'Str\",'my\"Str']"]
]
`
* Keys with special characters
`
parseObjectLiteral("a.b: 1, b+c: 2, c=d: 3, d_e: 4");
`
`
[ ["a.b","1"], ["b+c","2"], ["c=d","3"], ["d_e","4"] ]
`
* Keys without values, values without keys, etc.
`
parseObjectLiteral("keyonly, 'key:quoted', key:, {nokey: 4}");
`
`
[ ["keyonly",undefined], ["key:quoted",undefined], ["key",undefined], [undefined,"{nokey:4}"] ]
``