customized-json
Version:
A JSON parser that allows users to overwrite default parsing behavior by customized rules defined in a user-defined function that provides more useful parameters than the reviver function of JSON.parse().
76 lines (57 loc) • 3.3 kB
Markdown
[](https://badge.fury.io/js/customized-json)
[](https://travis-ci.com/SebastianG77/customized-json)
[](https://coveralls.io/github/SebastianG77/customized-json?branch=master)
[](https://standardjs.com)
A JSON parser that allows users to overwrite default parsing behavior by customized rules defined in a user-defined function that provides more useful parameters than the reviver function of `JSON.parse()`.
Install `customized-json` by running the following command:
```bash
$ npm install customized-json
```
Run `customized-json` as shown in the following example to parse a JSON string:
```javascript
const customizedJSON = require('customized-json')
const jsonString = `
{
"name": "Carl",
"pets": [
{
"name": "Charlie",
"type": "dog",
"age": 5,
"isChildFriendly": true
},
{
"name": "Lucy",
"type": "cat",
"age": 7,
"isChildFriendly": false
}
]
}`
const keyPathToLuciesAge = ['pets', 1, 'age']
const celebrateLuciesBirthday = (key, originalValue, stringValue, jsonObject, parentKeys) => {
if (parentKeys.length === keyPathToLuciesAge.length &&
parentKeys.every((key, index) => key === keyPathToLuciesAge[index])) {
return originalValue + 1
}
return originalValue
}
const parsedJSON = customizedJSON.parse(jsonString, celebrateLuciesBirthday)
console.log(`Lucie's new age: ${parsedJSON.pets[1].age}`) // Lucie's new age: 8
```
As can be seen above, the customization function must return a value which represents the new value and takes five different parameters that can be used for determining how to finally assign a value to the current property. Each parameter is documented in the table below.
|Parameter|Description|
|:--|:--|
|key|The key name of the current property.
|originalValue|The value of the current property as parsed by JSON.parse().
|stringValue|The string value of the current property as represented in the transferred JSON string.
|jsonObject|The JSON object parsed by JSON.parse().
|parentKeys|An array representing the key path to the current property. Keys of objects are represented by string values whereas array indices are of type number.
If no function or a function with less than three parameters will be transmitted to `customizedJSON.parse()`, the result of `JSON.parse()` will be returned to avoid the overhead caused by determining parameters for the customization function.
This module is still under construction. Thus, incompatible changes are possible whenever they appear reasonable. A stable version 1.0.0 is expected to be released later in 2021 and will contain the following improvements:
- A `customizedJSON.stringify()` function for customizing `JSON.stringify()`
- Examples to show how to use `customizedJSON.parse()` and `customizedJSON.stringify()`