今天是在深信服實習的第5天,接到任務要做產品的外語版,Web端的實習生目前只有我一個,前端和PHP的都要我來做。。。
現在需要一個寫一個腳本,處理兩個json文件,把Bjson文件在A中沒有的中文詞條都要找出來寫入另外一個json,實際需求要復雜得多,先寫個初步demo:
var fs = require('fs'),
path = require('path');
let ans = {};
//求一方的差集(不是嚴格意義上的差集,只是一邊的)
function diff(a, b) {
var keysA = Object.keys(a);
// console.log(keysA);
var keysB = Object.keys(b);
// console.log(keysB)
var ret = {}
keysB.forEach(key => {
if (keysA.indexOf(key) === -1) {
ret[key] = b[key];
}
});
return ret;
}
fs.readFile(path.join(__dirname, 'json/json1.json'), 'utf8',function (err,data1) {
if (err) throw err;
// console.log(data1);
data1 = JSON.parse(data1)
// console.log(typeof data1);
fs.readFile(path.join(__dirname, 'json/json2.json'), 'utf8',function (err,data2) {
if (err) throw err;
// console.log(data2);
data2 = JSON.parse(data2);
ans = diff(data1, data2);
// console.log(typeof ans);
console.log(ans);
let Str_ans = JSON.stringify(ans,null, 4);
fs.writeFile('ret.json', Str_ans, 'utf8', (err) => {
if (err) throw err;
console.log('done');
});
});
});
注意readFile和readFileSync,writeFile和writeFileSync,后者是前者的同步版。
但是一開始寫入的json格式巨丑:
后來查到stringify的API才知道格式化輸出。
JSON.stringify(value[, replacer [, space]])
參數
- value
將要序列化成 一個JSON 字符串的值。 - replacer 可選
如果該參數是一個函數,則在序列化過程中,被序列化的值的每個屬性都會經過該函數的轉換和處理;如果該參數是一個數組,則只有包含在這個數組中的屬性名才會被序列化到最終的 JSON 字符串中;如果該參數為null或者未提供,則對象所有的屬性都會被序列化;關於該參數更詳細的解釋和示例,請參考使用原生的 JSON 對象一文。 - space 可選
指定縮進用的空白字符串,用於美化輸出(pretty-print);如果參數是個數字,它代表有多少的空格;上限為10。該值若小於1,則意味着沒有空格;如果該參數為字符串(字符串的前十個字母),該字符串將被作為空格;如果該參數沒有提供(或者為null)將沒有空格。
返回值 一個表示給定值的JSON字符串。