我使用node来检查目录树并告诉我一组JSON文件中的所有空值。但是,以下代码返回文件路径列表,然后返回函数的结果。我希望每个文件名都在其结果之前:
文件名
结果
结果
文件名
...结果
var glob = require("glob"),
fs = require('fs');
glob("**/*/locales/*/*.json", function (er, files) {
for(var i = 0; i < files.length; i++ ){
console.log(files[i]);
fs.readFile(files[i], 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
var local = JSON.parse(data);
checkStr(local);
});
}
});
function checkStr (obj, parent) {
var parent = parent || "";
if (parent.length > 0) {parent = parent + '.'}
for(key in obj) {
if(typeof(obj[key]) === "object" && obj.hasOwnProperty(key)){
checkStr(obj[key], key);
}
else {
if(!obj[key].valueOf()){
console.log( "This is empty: " + parent + key );
}
}
}
}
答案 0 :(得分:1)
这应该有效:
var glob = require('glob');
var fs = require('fs');
function isObjectEmpty(obj) {
for (var name in obj) {
return false;
}
return true;
}
function findEmptyKey(parent, obj) {
var result = [];
for (var key in obj) {
if(typeof obj[key] === "object") {
if (isObjectEmpty(obj[key])) {
result.push(parent + '\\' + key);
} else {
Array.prototype.push.apply(result, findEmptyKey(key, obj[key]));
}
} else if (!obj[key]) {
result.push(parent + '\\' + key);
}
}
return result;
}
function processFile(file) {
fs.readFile(file, 'utf8', function (err,data) {
var keys = findEmptyKey('', JSON.parse(data));
if (keys.length>0) {
console.log(file);
keys.forEach(function(key) { console.log('This is empty: ' + key); });
}
});
}
glob("**/*/locales/*/*.json", function (er, files) {
files.forEach(processFile);
});