【问题标题】:node.js not writing JSON to file correctlynode.js 未正确将 JSON 写入文件
【发布时间】:2015-03-18 20:45:08
【问题描述】:

我正在将 JSON 对象写入从 twitter api 流式传输的文件。它们正确地登录到控制台,看起来像 JSON 对象;但是,当我使用命令时:

fs.appendFile("./tweets.json", tweet)

所有写入文件的内容如下:

[object Object]

这里发生了什么?当我将对象推文写入控制台时,这是输出:

 { created_at: 'Tue Mar 17 22:12:41 +0000 2015',
     id: 577955743997018100,
     id_str: '577955743997018112',
     text: 

  ......tons more stuff....

  filter_level: 'low',
  lang: 'en',
  timestamp_ms: '1426639434951' }

什么是[object Object],为什么要这么写?

【问题讨论】:

  • 如果您在文件中看到[object Object],那么tweet 不是包含JSON 格式数据的字符串,而是一个常规的javascript 对象。控制台输出:{ created_at: 'Tue Mar 17 22:12:41 +0000 2015', 清楚地表明它不是JSON。在JSON 格式的字符串中,key 需要用双引号引起来。

标签: javascript json node.js


【解决方案1】:

改变这一行

fs.appendFile("./tweets.json", tweet);

fs.appendFile("./tweets.json", JSON.stringify(tweet, null, ' '));

这是因为 appendFile 会调用 toString() 来打印你看到的内容,所以你需要将对象转成 JSON 字符串。

stringify 的后两个参数将漂亮地打印 JSON 对象,以便您可以查看并手动编辑它。如果您更喜欢紧凑的格式,只需将其省略即可。

【讨论】:

    【解决方案2】:

    fs.appendFile 需要一个字符串。但是你给它一个对象。您需要做的就是将对象转换为字符串。拨打JSON.stringify

    fs.appendFile("./tweets.json", JSON.stringify(tweet))
    

    如果fs.appendFile 没有收到字符串,那么它会尝试将参数转换为字符串。而且做得很糟糕。

    【讨论】:

      猜你喜欢
      • 2020-01-29
      • 2020-11-08
      • 2022-06-29
      • 2017-11-28
      • 2017-09-05
      • 1970-01-01
      • 2018-12-02
      • 2023-03-15
      • 2017-01-12
      相关资源
      最近更新 更多