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

保存含Emoji的JSON至文件后解析报错:Unexpected token in JSON

解决含Emoji的JSON文件保存与解析问题

问题原因

你的代码存在两个关键问题:

  1. 使用fileBuffer.asciiSlice()读取文件——Emoji属于Unicode字符(超出ASCII编码范围),用ASCII方式解析会破坏字符结构,导致JSON出现无效字符,触发Unexpected token错误。
  2. fs.writeFileSync和fs.readFileSync是同步方法,不需要加await关键字,属于冗余写法。

修复方案

方案1:读取时直接指定UTF-8编码(推荐)

读取文件时指定utf8编码,直接获取正确的字符串后解析JSON:

const fs = require('fs');
const message = { message: 'Thanks again 👸💋' };

// 同步写入文件,无需await
fs.writeFileSync('test123.json', JSON.stringify(message));
// 读取时指定utf8编码,直接得到可解析的字符串
const jsonStr = fs.readFileSync('test123.json', 'utf8');
const json = JSON.parse(jsonStr);

console.log(json); // 输出:{ message: 'Thanks again 👸💋' }

方案2:手动将Buffer转为UTF-8字符串

如果需要处理Buffer对象,不要用asciiSlice(),改用toString('utf8')完成转换:

const fs = require('fs');
const message = { message: 'Thanks again 👸💋' };

fs.writeFileSync('test123.json', JSON.stringify(message));
const fileBuffer = fs.readFileSync('test123.json');
// 用UTF-8编码转换Buffer为字符串
const jsonStr = fileBuffer.toString('utf8');
const json = JSON.parse(jsonStr);

console.log(json);

关键说明

  • JSON.stringify默认支持Unicode字符(包括Emoji),无需额外配置即可正确序列化;
  • 必须使用支持Unicode的编码(如UTF-8)读取包含Emoji的文件,ASCII编码无法处理非ASCII字符;
  • Node.js的同步文件操作方法不需要await,只有异步方法(fs.writeFile/fs.readFile)才需要配合async/await使用。

内容的提问来源于stack exchange,提问作者Dashiell Rose Bark-Huss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:35:27