Grunt Task for Merging Multiple JSON Files
This plugin requires Grunt ~0.4.0
If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-merge-json --save-devOnce the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-merge-json');replacer: (defaultnull) the replacer argument forJSON.stringify()(second argument).space: (default\t) the space argument forJSON.stringify()(third argument).
Run this task with the grunt merge-json command.
Task targets, files and options may be specified according to the Grunt Configuring tasks guide.
Assuming we have the following types of source JSON files:
src/foo/foo-en.json:
{
"foo": {
"title": "The Foo",
"name": "A wonderful component"
}
}src/bar/bar-en.json:
{
"bar": {
"title": "The Bar",
"name": "An even more wonderful component"
}
}Assuming we want to generate the following destination JSON file:
{
"foo": {
"title": "The Foo",
"name": "A wonderful component"
},
"bar": {
"title": "The Bar",
"name": "An even more wonderful component"
}
}grunt.initConfig({
"merge-json": {
"en": {
src: [ "src/**/*-en.json" ],
dest: "www/en.json"
},
"de": {
src: [ "src/**/*-de.json" ],
dest: "www/de.json"
}
}
});grunt.initConfig({
"merge-json": {
"i18n": {
files: {
"www/en.json": [ "src/**/*-en.json" ],
"www/de.json": [ "src/**/*-de.json" ]
}
}
}
});Lets assume that we want to merge these two files with colliding keys.
src/foo/en.json:
{
"title": "Title"
}src/bar/en.json:
{
"title": "Another title"
}To prevent overwriting the same keys we can configure to prepend a key before the object. Prepending can be configured as a regular expression that will be evaluated against the source file name.
The parameters are
regexp: (defaultnull) the regular expression to be evaluated.match: (defaultnull) the index of the result array from String.match()
grunt.initConfig({
"merge-json": {
options: {
prepend: {
regexp: '[\/]([a-z]+)[\/]',
match: 1
}
},
"en": {
src: [ "src/**/en.json" ],
dest: "www/en.json"
}
}
});This example will produce the following output
{
"foo": {
"title": "Title"
},
"bar": {
"title": "Another title"
}
}
