2016-10-25 64 views
0
的Concat Json文件

我想将我的json文件与每个jsonfile前缀的gulp任务合并。前缀为

我有这样

{ 
    "en": { 
    "title": "Component title english", 
    "subtitle": "Component subtitle english", 
    }, 
    "nl": { 
    "title": "Component title dutch", 
    "subtitle": "Component subtitle dutch", 
    } 
} 

几个JSON文件,我想与组件名称作为前缀合并这些因此合并的结果会来这样的事:

"componentBlogBox": { 
    "en": { 
    "title": "Component title english", 
    "subtitle": "Component subtitle english", 
    }, 
    "nl": { 
    "title": "Component title dutch", 
    "subtitle": "Component subtitle dutch", 
    } 
} 
}, 
"componentCaseSlider": { 
    "en": { 
    "title": "Caseslider title english", 
    "subtitle": "caseslider subtitle english", 
    }, 
    "nl": { 
    "title": "Component title dutch", 
    "subtitle": "Component subtitle dutch", 
    } 
} 

我有这个使用节点模块gulp-merge-json的gulp任务,但这只是将密钥替换成一个密钥。

gulp.task('json-merge', function(){ 
    gulp.src(['dest/json/blog-box/home.json', 'dest/json/case-slider/home.json']) 
    .pipe(jsonMerge('combined.json')) 
    .pipe(gulp.dest('dest/json')); 
}); 

有没有办法使用gulptask进行合并,而无需编辑我所有的json文件?

回答

1

gulp-merge-json提供edit选项,允许您在合并所有文件之前修改每个文件的解析JSON。

所以在你的情况下,你所要做的就是将解析后的每个文件的JSON粘贴到一个像{'componentBlogBox': parsedJson}这样的新对象中并返回。属性是否应该componentBlogBoxcomponentCaseSlider您可以通过查看文件的路径确定:(信用为camelCase功能去this answer

var jsonMerge = require('gulp-merge-json'); 
var path = require('path'); 

function camelCase(str) { 
    return str.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); }); 
} 

gulp.task('json-merge', function(){ 
    return gulp.src([ 
     'dest/json/blog-box/home.json', 
     'dest/json/case-slider/home.json' 
    ]) 
    .pipe(jsonMerge({ 
     fileName: 'combined.json', 
     edit: function(parsedJson, file) { 
     var component = path.basename(path.dirname(file.path)); 
     var editedJson = {}; 
     editedJson[camelCase('component-' + component)] = parsedJson; 
     return editedJson; 
     } 
    })) 
    .pipe(gulp.dest('dest/json')); 
}); 

0

真棒斯文,正是我一直在寻找对于。 camelcase的东西并不是一个必须的东西,但是对于进一步的开发来说它是一个很好的接触。

我简化成这个

gulp.task('json-merge', function(){ 
    return gulp.src([ 
     'dest/json/blog-box/home.json', 
     'dest/json/case-slider/home.json' 
    ]) 
    .pipe(jsonMerge({ 
     fileName: 'combined.json', 
     edit: function(parsedJson, file) { 
     var component = path.basename(path.dirname(file.path)); 
     var editedJson = {}; 
     editedJson[component] = parsedJson; 
     return editedJson; 
     } 
    })) 
    .pipe(gulp.dest('dest/json')); 
});