将javascript对象写入节点中的文件

时间:2017-02-09 09:10:52

标签: javascript node.js

如何使用Node获取JS对象(例如var obj = {a: 1, b: 2})并创建包含该对象的文件?

例如,以下作品:

var fs = require('fs')

fs.writeFile('./temp.js', 'var obj = {a: 1, b: 2}', function(err) {
  if(err) console.log(err)
  // creates a file containing: var obj = {a: 1, b: 2}
})

但这不起作用:

var obj = {a: 1, b: 2}

fs.writeFile('./temp.js', obj, function(err) {
  if(err) console.log(err)
  // creates a file containing: [object Object]
})

更新JSON.stringify()将创建一个JSON对象(即{"a":1,"b":2}),而不是Javascript对象(即{a:1,b:2}

5 个答案:

答案 0 :(得分:6)

感谢Stephan Bijzitter为link

我的问题可以这样解决:

var fs = require('fs')
var util = require('util')
var obj = {a: 1, b: 2}

fs.writeFileSync('./temp.js', 'var obj = ' + util.inspect(obj) , 'utf-8')

这会写入包含以下内容的文件:var obj = { a: 1, b: 2 }

答案 1 :(得分:2)

您需要stringify您的对象:

var obj = {a: 1, b: 2}

fs.writeFile('./temp.js', JSON.stringify(obj), function(err) {
  if(err) console.log(err)
})

答案 2 :(得分:1)

这是因为writeFile需要的论据。

https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback

它希望数据为<String> | <Buffer> | <Uint8Array>

所以你的第一个例子是有效的,因为它是一个字符串。

为了完成第二项工作,只需使用JSON.stringify(obj);

喜欢这个

fs.writeFile('file.txt', JSON.stringify(obj), callback)

希望这有帮助。

答案 3 :(得分:0)

使用JSON.stringify()

var obj = {a: 1, b: 2}

fs.writeFile('./temp.js', JSON.stringify(obj), function(err) {
  if(err) console.log(err)
  // creates a file containing: [object Object]
})

答案 4 :(得分:0)

const fs = require('fs')
const util = require('util')
const obj = {a: 1, b: 2}

fs.writeFileSync(
  './temp.js',
  util.formatWithOptions({compact: false}, 'var obj = %o', obj),
  'utf-8'
)

格式化输出:

// ./temp.js
var obj = {
  a: 1,
  b: 2
}