[英]Unexpected token in JSON at position 0
我正在嘗試使用 fs 讀取 a.json 文件並使用 JSON.parse() function 解析為 JavaScript object。
const json = JSON.parse(fs.readFileSync('./db.json', (err) => { if (err) throw err; }))
{
"hello": "world"
}
但我收到以下錯誤:
undefined:1 { ^ SyntaxError: position 0 處 JSON 中的意外標記
有誰知道怎么了?
如果您不告訴它使用什么編碼將文件內容轉換為文本, readFileSync
將返回一個Buffer
。 如果將Buffer
傳遞給JSON.parse
,它將在解析之前轉換為字符串。 Buffer
的toString
默認為 UTF-8。
所以有幾個可能的問題:
除此之外, readFileSync
不接受回調(它返回結果或拋出錯誤,因為它是同步的——這就是Sync
后綴在 Node.js API 中的含義)。 (如果它確實有回調,那么在該回調中執行throw err
將毫無意義。例如,它不會從您調用readFileSync
的 function 中拋出錯誤。)
如果文件不是 UTF-8,請告訴readFileSync
使用什么編碼(我建議始終這樣做,而不是稍后依賴隱式轉換為字符串)。 如果它在(比如說)UTF-16LE(“UTF-16 little endian”)中,那么你會這樣做:
const data = JSON.parse(fs.readFileSync('./db.json', "utf16le"));
如果它在帶有 BOM 的 UTF-8 中: Buffer
在轉換為字符串時不會刪除 BOM,因此您最終會在 position 0 處看到一個奇怪的字符,而JSON.parse
不喜歡。 如果是這種情況,您可以這樣做:
const UTF8_BOM = "\u{FEFF}";
let json = fs.readFileSync('./db.json', "utf8");
if (json.startsWith(UTF8_BOM)) {
// Remove the BOM
json = json.substring(UTF8_BOM.length);
}
// Parse the JSON
const data = JSON.parse(json);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.