Simple library to convert a json object into a new json object formatted by a template.
Install via npm:
$ npm install json-mapper-json
const jsonMapper = require('json-mapper-json');
jsonMapper(json<Object>, template<Object>) => Promise
{
newFieldName1: {
path: <String>, // required
formatting: <Function> // optional (ex: function(value) {return value + '_formatted';})
type: <NativeType> // optional (ex: String, Number, Boolean, ...) (not supported yet)
nested: { <Object> // optional
newNestedFieldName: <String>,
formatting: <Function> // optional
type: <NativeType> // optional (ex: String, Number, Boolean, ...) (not supported yet)
nested: { <Object> // optional
...
},
},
},
newFieldName2: <String> // (it's the path, syntactic sugar for {path: ''})
...
}
$root
: give possibility to access the root given object in a nested path.$item
: give possibility to access of the all item of an array in a nested path.
jsonMapper({
field: 'value',
}, {
'new_field': {
path: 'field',
},
}).then((result) => {
/*
result === {
'new_field': 'value',
}
*/
});
jsonMapper({
field1: {
field2: {
field3: 'value',
field4: 'value4',
},
},
}, {
'new_field': {
path: 'field1.field2',
nested: {
'nested_field1': {
path: 'field3',
},
'nested_field2': {
path: 'field4',
},
},
},
}).then((result) => {
/*
result === {
'new_field': {
'nested_field1': 'value',
'nested_field2': 'value4',
}
}
*/
});
jsonMapper({
field1: {
field2: {
field3: 'value',
},
},
}, {
'new_field': {
path: 'field1.field2.field3',
formatting: (value) => {return value + '_formatted';},
},
}).then((result) => {
/*
result === {
'new_field': 'value_formatted',
}
*/
});
jsonMapper([{
field: 'value1',
}, {
field: 'value2',
}, {
field: 'value3',
},
], {
'new_field': {
path: 'field',
},
}).then((result) => {
/*
result === [
{'new_field': 'value1'},
{'new_field': 'value2'},
{'new_field': 'value3'},
]
*/
});
jsonMapper([{
field: 'value1',
}, {
field: 'value2',
}, {
field: 'value3',
},
], {
'new_field': {
path: 'field',
formatting: (value) => {return value + '_formatted';},
},
}).then((result) => {
/*
result === [
{'new_field': 'value1_formatted'},
{'new_field': 'value2_formatted'},
{'new_field': 'value3_formatted'},
]
*/
});
jsonMapper({
field: 'value',
}, {
'new_field': 'field',
}).then((result) => {
/*
result === {
'new_field': 'value',
}
*/
});
jsonMapper([{
field: {'nested_field': 'value1'},
}, {
field: {'nested_field': 'value2'},
}, {
field: {'nested_field': 'value3'},
},
], {
'new_field': {
path: 'field',
nested: {
'new_nested_field': 'nested_field',
},
},
}).then((result) => {
/*
result === [
{'new_field': {'new_nested_field': 'value1'}},
{'new_field': {'new_nested_field': 'value2'}},
{'new_field': {'new_nested_field': 'value3'}},
]
*/
});
jsonMapper({
'content': {
'result': [
{
'courseStatisticsDto': {
'times': 3,
'persons': 1,
'courseCode': '',
},
'courseAddressDto': {},
'endDate': 1460590552000,
'startDate': 1460590552000,
'name': 'Example Course',
},
],
'type': 'offline',
},
}, {
data: {
path: 'content.result',
nested: {
name: 'name',
code: 'courseStatisticsDto.courseCode',
type: '$root.content.type',
},
},
}).then((result) => {
/*
result === {
'data': [{
'name': 'Example Course',
'code': '',
'type': 'offline',
}],
}
*/
});
jsonMapper({
hits: {
total: 1,
hits: [{
_index: 'some_index',
_type: 'some_type',
_id: '123456',
_score: 1,
_source: {
id: 123456
},
}],
},
}, {
hits: {
path: 'hits.hits',
nested: {
id: '_source.id',
type: {
path: '$item',
formatting: (value) => (`${value._index}/${value._type}`),
},
},
},
}).then((result) => {
/*
result === {
'hits': [{
'id': 123456,
'type': 'some_index/some_type',
}],
}
*/
});
this library is very usefull when you have well design models and have to communicate with horrible webservices.
- manage
type
property
This project is a work in progress and subject to API changes, please feel free to contribute