modify-json-loader
v1.0.0
Published
Modify properties or create whole json objects before loading with json-loader
Downloads
33
Maintainers
Readme
modify-json-loader
Modifies JSON before passed to json-loader. Based on json-pointer
Usage
install via npm:
npm install --save-dev modify-json-loader
add to webpack config:
module: {
rules: [
{
test: /package\.json/,
use: [
'json-loader',
{
loader: 'modify-json-loader',
options: {
include: '/address/city'
}
}
]
}
]
}
Pointers
This loader uses JSON pointer to address specific properties in JSON.
/* json */ /* pointer */
{
"foo": "bar", /foo
"list": [ /list
"entry0", /list/0
123 /list/1
],
"language": { /language
"en": "example", /language/en
"de": "Beispiel", /language/de
}
}
For more details see JSON-pointer specification
Options
.include
Type: pointer || [pointer]
Default: undefined
If set, only properties matching the pointers are written into output result.
include: ['/foo', '/language/de']
=>
{
"foo": "bar",
"language": {
"de": "Beispiel",
}
}
.exclude
Type: pointer || [pointer]
Default: undefined
If set, only properties not matching the pointers are written into output result.
exclude: ['/language/de', '/list']
=>
{
"foo": "bar",
"language": {
"en": "example",
}
}
Note: including or excluding array elements is not working properly at the moment.
.set
Type: object
Default: undefined
The set options allows to change or create new properties for the output JSON. The parameter for this option is an object
containing key/value pairs, where the keys represent JSON pointers which are set to the related values. Following types are allowed for values:
string
,number
,boolean
,null
: set the pointer to the valueobject
: set the pointer to the whole objectfunction(originalValue, originalJSON)
: set the pointer to the result of a provided function. The function is invoked with two parameters:originalValue
: the value found in the original json for that pointer.undefined
if pointer does not exist in original JSON.originalJSON
: the original JSON object
set: {
'/foo': (val, json) => `Bier${val}`,
'/time': () => new Date(),
'/list/1': (val) => val * 2,
'/language/de': 'beispiellos',
}
=>
{
"foo": "Bierbar",
"time": "2017-07-23T00:48:34.683Z",
"list": [
"entry0",
246
],
"language": {
"en": "example",
"de": "beispiellos",
}
}
.stringified
Type: boolean
Default: false
If not set, the loader outputs the manipulated JSON as a plain java object. If set to true
, the output is a converted to a JSON string.
.disableCaching
Type: boolean
Default: false
If set to true
the loader will prevent webpack from caching its result. This is useful if your are using the the .set option in combination with a function providing dynamic results for repeated runs.
set: {
'/time': () => new Date(),
},
disableCaching: true