parse-json-path
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

✂️ parse-json-path

Slice a string at characters . - [ - and ] - but not '\\.'

npm License: MIT

Features

  • Handles '.' in key name by prepending a '\\' to it.
    • For example keyFoo.keyBar.key\\.Baz
  • 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

Show your support

Give a ⭐️ if this project helped you!

📝 License

Copyright © 2019 Cam Smith.

This project is MIT licensed.

Package Sidebar

Install

npm i parse-json-path

Weekly Downloads

4

Version

1.0.1

License

MIT

Unpacked Size

6.65 kB

Total Files

7

Last publish

Collaborators

  • camsmith145