parse-json-path
v1.0.1
Published
Slice a string at characters `.` - `[` - and `]` - but not '\\.'
Downloads
4
Maintainers
Readme
✂️ parse-json-path
Slice a string at characters .
- [
- and ]
- but not '\\.'
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 --
{
"0.0": "value",
"1.0": "value"
}
-- 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 = require('parse-json-path')
/* ... */
parseJsonPath(someString)
ES2017
import { parseJsonPath } from 'parse-json-path'
/* ... */
parseJsonPath(someString)
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
parseJsonPath('key1.easy')
//=> [ 'key1', 'easy' ]
parseJsonPath('key1.dot\\.key.1')
//=> [ 'key1', 'dot.key', 1 ]
parseJsonPath('key1.dot\\.key.3.array4key.nested')
//=> [ 'key1', 'dot.key', 3, 'array4key', 'nested' ]
parseJsonPath('0\\.sneakyKey')
//=> [ '0.sneakyKey' ]
parseJsonPath('0.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.