UNPKG

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
# customized-json [![npm version](https://badge.fury.io/js/customized-json.svg)](https://badge.fury.io/js/customized-json) [![Build Status](https://travis-ci.com/SebastianG77/customized-json.svg?branch=master)](https://travis-ci.com/SebastianG77/customized-json) [![Coverage Status](https://coveralls.io/repos/github/SebastianG77/customized-json/badge.svg?branch=master)](https://coveralls.io/github/SebastianG77/customized-json?branch=master) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](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()`. ### Setup Install `customized-json` by running the following command: ```bash $ npm install customized-json ``` ### Parse a JSON String 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. ### Things To Do 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()`