✂️ parse-json-path
.
- [
- and ]
- but not '\\.'
Slice a string at characters
Features
- Handles '.' in key name by prepending a '\\' to it.
- For example
keyFoo.keyBar.key\\.Baz
- For example
- Returns fully numeric keys as integer values representing an array index.
- Handles numeric and escaped-dot tokens at combination within key names.
Motivation
In a whole handful of minutes I didn't come across something that did the specific thing. Also, I think having type declarations is pretty handy, even for projects not utilizing typescript, so I became the change I wanted to see in the world. 🌈
About
A majority of the module is a RegExp
pattern:
/((.\\\.|[^[\].])*).(?=\.|\n|\r|$)/g
The array of matched substrings are then matched against a simpler pattern - /[0-9]+/gu
- if there is a singlular match of the
whole string, parseInt
provides the value of that element. This accounts for puzzing yet possible scenarios where keys
of a JSON file are something like --
-- which is valid JSON according to the spec.
Install
yarn add parse-json-path
npm i parse-json-path
Module use
CommonJS module
const parseJsonPath = /* ... */
ES2017
/* ... */
API
parseJsonPath(string[, boolean])
Parameter | Type |
---|---|
path |
string |
silentFail |
undefined | boolean |
In the case that the value to be parsed is:
- Not a string
- Without matches against the first regex
The function accepts an optional second argument - silentFail?: boolean
. If truthy, the above scenarios result in a
return value of undefined
, rather than throwing an Error
. Results can then be handled as needed.
Sample of inputs the resuturned JSON selectors
>> Test report and samples last generated on 2019-11-23T06:31:34.516Z
//=> [ 'key1', 'easy' ]
//=> [ 'key1', 'dot.key', 1 ]
//=> [ 'key1', 'dot.key', 3, 'array4key', 'nested' ]
//=> [ '0.sneakyKey' ]
//=> [ 0, '0.sneakyKey' ]
Test Output
√ Parse key path: key1.easy √ Parse key path: key1.dot\.key.1 √ Parse key path: key1.dot\.key.3.array4key.nested √ Parse key path: 0\.sneakyKey √ Parse key path: 0.0\.sneakyKey 5 tests passed
Dependencies: 0
Suggestions, PRs, issue reports are welcome.
Author
👤 Cam Smith
- Github: @csmith14
Show your support
Give a ⭐️ if this project helped you!
📝 License
Copyright © 2019 Cam Smith.
This project is MIT licensed.