Package Exports
- json-refactor
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (json-refactor) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
json-refactor
Refactor JSON object structure based on provided rules.
quick start
npm install json-refactor --save
import refactor from 'json-refactor';
const result = refactor(target, rules, clone);
target
: target to be refactoredrules
: rules to refactorclone
: defaultfalse
, whether to clone a copy of target. By default, the original target will be modified and return. Iftrue
, a new cloned target will be formatted and return, and the original target will not be modified.
rules
The to key
to from key
hash map.
1. base
target
: {a: 1, b: 2}
rules
: {aaa: 'a', bbb: 'b'}
result
: {aaa: 1, bbb: 2}
2. rules should have the same structure with target, including array
target
: [{a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}]
rules
: [{aaa: 'a', bbb: 'b'}]
result
: [{aaa: 1, bbb: 2}, {aaa: 3, bbb: 4}, {aaa: 5, bbb: 6}]
3. support .
semantic
target
: {a: {a: {a: 1}}}
rules
: {aaa: 'a.a.a'}
result
: {aaa: 1}
4. make a new key, and keep on formatting the new key
target
: {a: {a: {a: 1}}}
rules
: {aaa: 'a', _aaa: {aaa: 'a', _aaa: {aaa: 'a'}}}
result
: {aaa: {aaa: {aaa: 1}}}
5. take an operator to original value
Use |
to concat from key
and operator
, and you can add multiple operators.
target
: {a: 1, b: '234', c: '1.22', d: '0.01'}
rules
: {aaa: 'a|bool', bbb: 'b|int', ccc: 'c|float', ddd: 'd|int|bool'}
result
: {aaa: true, bbb: 234, ccc: 1.22, ddd: false}
api
refactor.set
Set the default config values.
refactor.set({
keepOnHandling: '_',
operatorDelimiter: '|'
});
keepOnHandling
: make a new key, and keep on formatting the new keytype
:string
default
:_
operatorDelimiter
: delimiter of operatorstype
:string
default
:|
refactor.register
Register operators.
// register one operator
refactor.register(test, handler);
refactor.register({test, handler});
// register multiple operators
refactor.register([{test1, handler1}, {test2, handler2}, ...]);
test
: to match the operatortype
:string/RegExp
example
:int
,float
,bool
,string
,/^slice!0!10/
handler
: handle the original value and return a new valuetype
:function
example
:(value, operator) => newValue
parameters
:value, operator
value
: original value to be handledoperator
: operator matched
built-in operators
1. int
Get an integer value.
2. float
Get a float value.
3. bool
Get a bool value.
4. string
Get a string value.
5. sum
Get a sum value specified by a key of each element, within an array.
format
: sum!key
target
: {oldKey: [{a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}]}
rules
: {newKey: 'oldKey|sum!a'}
result
: {newKey: 9}
6. average
Get an average value specified by a key of each element, within an array.
format
: average!key
target
: {oldKey: [{a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}]}
rules
: {newKey: 'oldKey|average!a'}
result
: {newKey: 3}