Utility function to beautify JSON string...like JSON.stringify() but better
npm install perfect-json




Utility function to beautify JSON string...like JSON.stringify() but better
```
npm install perfect-json
or
``
yarn add perfect-json
`javascript`
perfectJson(obj, options)
- obj — JSON to beautify;options
- — optional parameters:indent
- — count of indentation spaces (defaults to 2);compact
- — tells whether close and open brackets of object array items must be placed on the same line (defaults to true); singleLine
- — tells whether values of object properties must be placed on a single line, it can be of boolean type or a function returning a boolean result and being invoked for each property of an object recursively — the function receives an object argument with the following properties:key
- — name of the current property (zero-based index in case of array);value
- — value of the current property;path
- — array consisting of names of all ascendant properties including the current one;items
- — array of references to all ascendant objects and arrays;line
- — stringified array or object value placed on a single line;depth
- — zero-based depth level (equals to path.length and items.length);indent
- — count of indentation spaces per level ((depth + 1) * indent results in a summary indentation on a given level).maxLineLength
- — places objects and arrays on a single line if resulting line's length is less than or equal to specified value;arrayMargin
- — characters after opening and before closing array brackets when array is placed on a single line (defaults to empty string meaning no gap: ["Javascript", "Node.js", "ES6"]);objectMargin
- — characters after opening and before closing object brackets when object is placed on a single line (defaults to ' ' meaning a gap: { "node": "14.0.0", "eslint": true, "babel": true, "typescript": false });split
- — function to split the resulting JSON into several nested JSONs, it accepts the same properties as singleLine function excepting line and should return a string placeholder to replace the current property by; JSON parts replaced by placeholders are stored in a separate object (where keys are placeholders) that can be accessed in splitResult function;splitResult
- — function being called at the end of transformation with an object of splitted JSONs as an argument.
Just pass an object to stringify:
`javascript`
const perfectJson = require('perfect-json');
console.log(perfectJson({
name: 'Dmitriy',
surname: 'Pushkov',
skills: ['JavaScript', 'Node.js', 'ES6'],
env: { node: '14.0.0', eslint: true, babel: true, typescript: false }
}));
Result:
`json`
{
"name": "Dmitriy",
"surname": "Pushkov",
"skills": [
"JavaScript",
"Node.js",
"ES6"
],
"env": {
"node": "14.0.0",
"eslint": true,
"babel": true,
"typescript": false
}
}
Use compact option:
`javascript`
const perfectJson = require('perfect-json');
console.log(perfectJson([{
name: 'Dmitriy',
surname: 'Pushkov'
}, {
name: 'Tamara',
surname: 'Pushkova'
}], {
compact: false
}));
Result:
`json`
[
{
"name": "Dmitriy",
"surname": "Pushkov"
},
{
"name": "Tamara",
"surname": "Pushkova"
}
]
Use indent option:
`javascript`
const perfectJson = require('perfect-json');
console.log(perfectJson({
name: 'Dmitriy',
surname: 'Pushkov',
skills: ['JavaScript', 'Node.js', 'ES6'],
env: { node: '14.0.0', eslint: true, babel: true, typescript: false }
}, {
indent: 4
}));
Result:
`json`
{
"name": "Dmitriy",
"surname": "Pushkov",
"skills": [
"JavaScript",
"Node.js",
"ES6"
],
"env": {
"node": "14.0.0",
"eslint": true,
"babel": true,
"typescript": false
}
}
Use singleLine option:
`javascript`
const perfectJson = require('perfect-json');
console.log(perfectJson({
name: 'Dmitriy',
surname: 'Pushkov',
skills: ['JavaScript', 'Node.js', 'ES6'],
env: { node: '14.0.0', eslint: true, babel: true, typescript: false }
}, {
singleLine: ({ key }) => {
return ['skills', 'env'].includes(key);
}
}));
Result:
`json`
{
"name": "Dmitriy",
"surname": "Pushkov",
"skills": ["JavaScript", "Node.js", "ES6"],
"env": { "node": "14.0.0", "eslint": true, "babel": true, "typescript": false }
}
Use maxLineLength option:
`javascript`
const perfectJson = require('perfect-json');
const obj = {
name: 'Dmitriy',
surname: 'Pushkov',
skills: ['JavaScript', 'Node.js', 'ES6'],
env: { node: "14.0.0", eslint: true, babel: true, typescript: false }
};
console.log(perfectJson(obj, {
maxLineLength: 40
}));
console.log(perfectJson(obj, {
maxLineLength: 80
}));
Result:
`json
{
"name": "Dmitriy",
"surname": "Pushkov",
"skills": ["JavaScript", "Node.js", "ES6"],
"env": {
"node": "14.0.0",
"eslint": true,
"babel": true,
"typescript": false
}
}
`
`json`
{
"name": "Dmitriy",
"surname": "Pushkov",
"skills": ["JavaScript", "Node.js", "ES6"],
"env": { "node": "14.0.0", "eslint": true, "babel": true, "typescript": false }
}
Use split and splitResult options together:
`javascript`
const perfectJson = require('perfect-json');
console.log(perfectJson({
name: 'Dmitriy',
surname: 'Pushkov',
skills: ['JavaScript', 'Node.js', 'ES6'],
env: { node: '14.0.0', eslint: true, babel: true, typescript: false }
}, {
split: ({ key, depth }) => {
if (depth !== 1) {
return null;
}
switch (key) {
case 'skills': return '#skills';
case 'env': return '#env';
default: return null;
}
},
splitResult: splitted => {
console.log(splitted['#skills']);
console.log(splitted['#env']);
}
}));
Result:
`json`
[
"JavaScript",
"Node.js",
"ES6"
]
`json`
{
"node": "14.0.0",
"eslint": true,
"babel": true,
"typescript": false
}
`json``
{
"name": "Dmitriy",
"surname": "Pushkov",
"skills": "#skills",
"env": "#env"
}