美文网首页
JSON.stringify在Nodejs写文件fs.write

JSON.stringify在Nodejs写文件fs.write

作者: 楠小忎 | 来源:发表于2017-09-27 11:03 被阅读758次

环境:

  • node version: 6.10.2
  • 操作系统:mac OSX

在Node.js中,使用fs.writeFileSync写一份文件,fs.writeFileSync的用法在 这里
我们本次写入文件的源数据是string,是JSON格式的字符串。写入的数据,JSON是有一定格式的,但是当你打开新写出来的文件,会发现文件只有一行。

下面是详细的例子。

'use strict';

let fs = require('fs');

let data = {
  "a": {
    "hehe":1,
    "haha": 2
  },
  "b": {
    "hihi": 3,
    "ohoh": 4
  }
};

let baseDir = __dirname;
let opts = {
  cwd: baseDir,
  encoding: 'utf8',
  stdio: [process.stdin, process.stdout, process.stderr]
}
let fileName = baseDir + 'test.js';

fs.writeFileSync(fileName, `'use strict';\n\n module.exports = ${JSON.stringify(data)}`, opts);

打开文件可以看到数据如下:

'use strict';

 module.exports = {"a":{"hehe":1,"haha":2},"b":{"hihi":3,"ohoh":4}}

如果希望新文件中的数据,显示出来的数据格式看起来和写入的源数据的格式一样,可以像下面这样使用JSON.stringify:

'use strict';

let fs = require('fs');

let data = {
  "a": {
    "hehe":1,
    "haha": 2
  },
  "b": {
    "hihi": 3,
    "ohoh": 4
  }
};

let baseDir = __dirname + '/../';
let opts = {
  cwd: baseDir,
  encoding: 'utf8',
  stdio: [process.stdin, process.stdout, process.stderr]
}
let fileName = baseDir + 'test.js';

fs.writeFileSync(fileName, `'use strict';\n\n module.exports = ${JSON.stringify(data, null, 2)}`, opts);



打开新文件

'use strict';

 module.exports = {
  "a": {
    "hehe": 1,
    "haha": 2
  },
  "b": {
    "hihi": 3,
    "ohoh": 4
  }
}

之所以会发生这样的变化,是因为JSON.stringify(value[, replacer, space])一共接受三个参数:

  • value: 要序列化成 一个JSON 字符串的值
  • replacer: (可选) 如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;如果该参数为null或者未提供,则对象所有的属性都会被序列化;关于该参数更详细的解释和示例,请参考使用原生的 JSON 对象一文。
  • space: (可选) 指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;如果该参数为字符串(字符串的前十个字母),该字符串将被作为空格;如果该参数没有提供(或者为null)将没有空格

所以上面的例子中将第二个参数设置为null,就将源数据的对象所有属性都序列化了,而将第三个参数设置为2,就美化了输出,因此被写到文件的数据达到和源数据的格式一样的效果
关于JSON.stringify的详细介绍可见这里

另外,有一个模块也可以达到这种效果: format-json-pretty

'use strict';

let fs = require('fs');
let formatJson = require('format-json-pretty');

let data = {
  "a": {
    "hehe":1,
    "haha": 2
  },
  "b": {
    "hihi": 3,
    "ohoh": 4
  }
};

let baseDir = __dirname + '/../';
let opts = {
  cwd: baseDir,
  encoding: 'utf8',
  stdio: [process.stdin, process.stdout, process.stderr]
}
let fileName = baseDir + 'test.js';

fs.writeFileSync(fileName, `'use strict';\n\n module.exports = ${formatJson(data)}`, opts);

相关文章

网友评论

      本文标题:JSON.stringify在Nodejs写文件fs.write

      本文链接:https://www.haomeiwen.com/subject/idoyextx.html