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字符串。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值