Node讀取和寫入json,格式化輸出json


今天是在深信服實習的第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字符串。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM