You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用util.inspect生成带引号键的符合预期的JSON格式输出?

问题:Node.js写入JSON文件时键无引号导致读取报错

代码与预期输出

你的代码

var gameon = 1;
var fighter1 = {"userid":"97","username":"john","items":{},"ailments":{}};
var fighter2 = {"userid":"91","username":"james","items":{},"ailments":{}};
var resume = 30;

all = {gameon:gameon,fighter1:fighter1,fighter2:fighter2,resume:resume,inturn:fighter1,outturn:fighter2};
    
fs.writeFileSync(file, util.inspect(all, { showHidden: true, depth: null }), { encoding: 'utf8', flag: 'w' });

期望的JSON输出

{
  "gameon":1,
  "fighter1":{
    "userid":"97",
    "username":"john",
    "items": {},
    "ailments":{}
   },
   "fighter2":{
     "userid":"91",
     "username":"james",
     "items":{},
     "ailments":{}
    },
    "resume":"",
    "inturn":{
      "userid":"97",
      "username":"john",
      "items":{},
      "ailments":{}
     },
     "outturn":{
       "userid":"91",
       "username":"james",
       "items":{},
       "ailments":{}
      }
}

原因分析

  • 核心问题:你用了util.inspect()来生成对象的字符串表示,这个方法是Node.js的调试工具,用来输出适合人类阅读的对象调试信息,而非标准JSON格式。它不会自动给键名加双引号(仅特殊标识符才加),导致写入的文件不符合JSON规范,后续用JSON.parse()读取必然报错。

解决方法

改用Node.js内置的JSON.stringify()方法序列化对象,它严格遵循JSON规范,自动给所有键名加双引号,还支持格式化输出。另外注意你期望中resume的值是空字符串,需要手动调整代码里的变量值。

修改后的代码

var gameon = 1;
var fighter1 = {"userid":"97","username":"john","items":{},"ailments":{}};
var fighter2 = {"userid":"91","username":"james","items":{},"ailments":{}};
var resume = ""; // 调整为期望的空字符串

const all = {
  gameon: gameon,
  fighter1: fighter1,
  fighter2: fighter2,
  resume: resume,
  inturn: fighter1,
  outturn: fighter2
};

// JSON.stringify参数说明:
// 1. 要序列化的对象
// 2. replacer:null表示保留所有属性
// 3. 缩进数:2表示用2个空格缩进,让输出更易读
fs.writeFileSync(file, JSON.stringify(all, null, 2), { encoding: 'utf8', flag: 'w' });

补充说明

  • 如果遇到对象循环引用的场景(比如对象内部引用自身),基础JSON.stringify()会报错,此时可以自定义replacer函数处理,或使用第三方库(如circular-json),但你的当前场景不需要额外处理。

内容的提问来源于stack exchange,提问作者Cain Nuke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:15:48