You need to enable JavaScript to run this app. 如何使用fs.writeFileSync将输入内容写入JSON数组列表格式存储
优惠活动
大模型
产品
解决方案
定价
更多

如何使用fs.writeFileSync将输入内容写入JSON数组列表格式存储

代码调整方案

现有逻辑的问题

当前代码没法生成列表结构,根源在两点:

  • 直接把单次输入的字符串做JSON序列化写入,没有套数组结构,最终文件里存的就是单个字符串值
  • 每次运行都是直接覆盖文件内容,没有读取、合并已有词汇的逻辑,哪怕临时把字符串包进数组,下一次运行也会把之前存的内容全部冲掉

必加的逻辑环节

要实现符合要求的JSON列表存储,需要补全三块逻辑:

  • 固定用数组作为存储结构,目标存储文件不存在时,先初始化空数组
  • 写入前先读取已有文件内容,兜底处理文件损坏、JSON格式解析失败的异常场景
  • 对新输入的词汇做去空、去重处理后,追加到数组末尾,再把完整数组序列化写回文件

修正后的完整代码

const fs = require('fs');
const readline = require('readline');
const path = require('path');

// 定义存储文件的绝对路径,避免跨系统路径拼接问题
const STORE_FILE = path.join(__dirname, 'startkeywords.json');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

// 读取本地已存的词汇列表
function loadExistingKeywords() {
  // 文件不存在时直接返回空列表
  if (!fs.existsSync(STORE_FILE)) {
    return [];
  }
  try {
    const rawContent = fs.readFileSync(STORE_FILE, 'utf8');
    const parsedContent = JSON.parse(rawContent);
    // 兜底校验:解析出的内容不是数组时返回空列表,避免后续写入报错
    return Array.isArray(parsedContent) ? parsedContent : [];
  } catch (err) {
    console.log('本地存储文件格式异常,将重置为新的词汇列表');
    return [];
  }
}

rl.question('Hello! ', (answer) => {
  // 去掉输入内容首尾的空格,过滤空输入
  const normalizedInput = answer.trim();
  if (!normalizedInput) {
    console.log('输入内容为空,未完成存储');
    rl.close();
    return;
  }

  const keywordList = loadExistingKeywords();
  // 去重:避免同一个词汇反复存入列表
  if (!keywordList.includes(normalizedInput)) {
    keywordList.push(normalizedInput);
  }

  // 把完整列表序列化后写回文件,保留格式化缩进
  fs.writeFileSync(STORE_FILE, JSON.stringify(keywordList, null, 4));
  console.log(`已将"${normalizedInput}"存入词汇列表 :)`);
  console.log(`存储文件路径:${STORE_FILE}`);

  rl.close();
});

最终存储效果

多次运行程序、分别输入hello、Heya这类问候词后,生成的startkeywords.json就是标准列表结构,示例如下:

[
    "hello",
    "Heya",
    "hi"
]

后续做随机打招呼功能时,直接读取这个文件解析成数组,用Math.random()取随机元素输出就行,不需要再做格式转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 00:15:03