2016-10-06 5 views
2

J'ai plusieurs fichiers JSON, chacun situé dans des chemins différents. Maintenant, je suis en train de concaténer tous les fichiers avec "grunt-concat-json".Grunt concat plusieurs fichiers JSON

Les fichiers JSON source sont à la recherche comme ceci:

ExampleA.json

[ { 
    "configPath": "Example A" 
} ] 

ExampleB.json

[ { 
    "configPath": "Example B" 
} ] 

Comment puis-je configurer ma tâche rébarbatives pour obtenir le résultat suivant Fichier JSON:

[ 
    { 
     "configPath": "Example A" 
    }, 
    { 
     "configPath": "Example B" 
    } ] 

J'ai essayé avec cette config:

concat: { 
json: 
    { 
     src: [ 
       'pathA/ExampleA.json', 
       'pathB/ExampleB.json 
      ], 
     dest: 'pathX/Merged.json', 
      options: { 
       separator: ',' 
      } 
     } 
    }, 

Avec ce réglage, je me le résultat suivant:

[ 
    { 
     "configPath": "Example A" 
    } 
], 
[ 
    { 
     "configPath": "Example B" 
    } 
] 

mais mon résultat JSON doit avoir un seul tableau, que je peux boucle à travers dans mon code comme

configPaths.forEach(configPath) { ... } 
+1

Il ne devrait pas être trop difficile d'écrire une tâche de grunt sur mesure pour cela. Vérifiez http://gruntjs.com/creating-tasks – techfoobar

Répondre

0

Voici une implémentation de base de validation zéro très élémentaire qui devrait être juste assez pour vous aider à démarrer.

grunt.registerMultiTask('concatArrays', 'concatArrays', function() { 
    this.files.forEach(function(_set) { 
     var combined = []; 
     _set.src.forEach(function(_file) { 
      combined = combined.concat(JSON.parse(grunt.file.read(_file))); 
     }); 
     grunt.file.write(_set.dest, JSON.stringify(combined)); 
    }); 
}); 

Vous pouvez configurer comme filesets:

concatArrays: { 
    local: { 
     files: [{ 
      src: ['a.json', 'b.json'], 
      dest: 'combined.json' 
     }], 
    } 
}