obj-stringify
This small library helps you to deeply serialize your objects perserving inner functions and objects.
## How is it different from well-known JSON.stringify method? So it
- Avoids double quotes around properties and values.
- Correctly shows inner RegExp, Functions and so on.
- Allows you to choose single or double quotes for string values.
## Installation
$ npm install obj-stringify --save
## Usage You can import it using CommonJS format
const objStringify =
If you work with RequireJS module format:
Finally, if you don't use any module systems you can insert it via script tag and objStringify function would be accessible in global namespace.
// index.html<script src="node_modules/obj-strinfigy/index.js"></script><script src="src/app.js"></script> // src/app.jsconsole // true
## Params
## objStringify(obj [, options]) ### obj
Object you want to stringify.
Type: Object
Array
Required: true
Note: for other argument types will be returned serialized value!
### options Formatted configuration. Use it to specify required format and depth of transformation
Type: Object
Required: false
#### You can configure:
#### options.indent If it is a number then such amount of spaces will be used to make string look more readable. In case it is a string, it will be used instead of spaces.
Type: Number
String
Default: 2
#### options.depth The level of accurately transformation. Use it when you don't want to stringify very deep objects
Type: Number
Default: 1000
#### options.inline Allows you to return one line string.
Type: Boolean
Default: false
#### options.singleQuotes It defines whether string values inside object should be wrapped in single quotes. Set it to false when you want to get double quotes for string values.
Type: Boolean
Default: true
## Examples
const obj = module: rules: test: /test\.js$/ exclude: 'libs/js/angular' const options = indent: ' ' // use 2 spaces as indent singleQuotes: false // use double quotes; const res = console/*{ module: { rules: [ { test: /test\.js$/, exclude: "libs/js/angular" } ] }}*/
Show functions correctly:
const helper = methods: { return a + b; } str // convert using default optionsconst res = console/*{ methods: [ { sum: function (a, b) { return a + b; } }, { reverse: (str) => str.split('').reverse().join('') } ]}*/
Using depth:
const status = tasks: inProgress: id: 22 name: 'create header' completed: id: 3 name: 'setup environment' backlog: id: 6 name: 'customize player' const options = depth: 2 // restrict accurate serialization to 2 levels. Deeper this level would be called toString method. const res = console/*{ tasks: { inProgress: [object Object], completed: [object Object] }, backlog: [ [object Object] ]}*/
Serialize dates as well:
const carHistory = issued: 2012 3 22 beginUsedIn: 2012 8 3 info: accidents: date: 2014 6 6 damages: const res = ; console// It prints Belarus Standard Time as I am staying there./*{ issued: 'Sun Apr 22 2012 00:00:00 GMT+0300 (Belarus Standard Time)', beginUsedIn: 'Mon Sep 03 2012 00:00:00 GMT+0300 (Belarus Standard Time)', info: { accidents: [ { date: 'Sun Jul 06 2014 00:00:00 GMT+0300 (Belarus Standard Time)', damages: [] } ] }}*/
Pass array as argument:
const cbs = { return val * 2; } { return !val; } const res = console/*[ function (val) { return val * 2; }, function (val) { return !val; }]*/
Using inline option:
const container = name: 'list' children: name: 'popup' type: 3 const options = inline: true // returns inline string const res = console /*{ name: 'list', children: { name: 'popup', type: 3 }}*/
Using sign as indent:
const phone = manufacturer: 'apple' const options = indent: '$' const res = console /*{$manufacturer: 'apple'}*/
## Keep in mind:
-
It doesn't support circular references, non-enumerable properties, symbol properties.
-
It travers through passed object and gradually serializes its value calling toString method. So you can define custom toString method on your object and it will be called during serialization.
-
It doesn't support object's subtypes like Math, Navigator, history etc.
-
It can't serialize very deep objects (approximately 10000 levels deep) as browsers have some restrictions for recursion.