1.0.1 ā€¢ Published 4 years ago

parse-json-path v1.0.1

Weekly downloads
3
License
MIT
Repository
github
Last release
4 years ago

āœ‚ļø 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)

ParameterType
pathstring
silentFailundefined | 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.