Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/deepraining/json-refactor
基于指定的规则对 Json 数据结构进行重构. Refactor JSON object structure based on provided rules.
https://github.com/deepraining/json-refactor
format json refactor rule structure
Last synced: about 5 hours ago
JSON representation
基于指定的规则对 Json 数据结构进行重构. Refactor JSON object structure based on provided rules.
- Host: GitHub
- URL: https://github.com/deepraining/json-refactor
- Owner: deepraining
- License: mit
- Created: 2017-02-28T12:56:41.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2019-07-24T02:32:43.000Z (over 5 years ago)
- Last Synced: 2024-11-08T10:34:48.799Z (7 days ago)
- Topics: format, json, refactor, rule, structure
- Language: JavaScript
- Homepage:
- Size: 115 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.en.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# json-refactor
[中文文档](./README.md)
Refactor JSON object structure based on provided rules.
## quick start
```
npm install json-refactor --save
```## how to use
```
import refactor from 'json-refactor';const result = refactor(target, rules, clone);
```- `target`: target to be refactored
- `rules`: rules to refactor
- `clone`: default `false`, whether to clone a copy of target. By default, the original target will be modified and return. If `true`, 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 key
- `type`: `string`
- `default`: `_`- `operatorDelimiter`: delimiter of operators
- `type`: `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 operator
- `type`: `string/RegExp`
- `example`: `int`, `float`, `bool`, `string`, `/^slice!0!10/`- `handler`: handle the original value and return a new value
- `type`: `function`
- `example`: `(value, operator) => newValue`
- `parameters`: `value, operator`
- `value`: original value to be handled
- `operator`: 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}`