【问题标题】:SyntaxError: Unexpected token { in JSON at position 0SyntaxError: Unexpected token { in JSON at position 0
【发布时间】:2019-05-25 03:51:57
【问题描述】:

我正在尝试解析 JSON 文件,但在位置 0 处获得了预期的令牌 {

SolaceConnetionParser.js

class SolaceConnectionParser {
    constructor() { }

    //TODO: cannot parse json correctly
    parse(filepath) {
        const connectionArgs = [];
        console.log('File path: ' + filepath);
        const rawData = fs.readFileSync(filepath, 'utf-8').toString;
        const contents = JSON.parse(rawData);
        return contents;
    }
}

module.exports = SolaceConnectionParser;

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

const parser = new SolaceConnectionParser();
const filepath = path.join(__dirname + '../../../configs/test.json');
console.log(parser.parse(filepath));

test.json

{
  "key": "value"
}

预期: 代码中的其余语句应输出到控制台(即:JSON 内容)。
实际:

$ node SolaceConnectionParser.js
File path: C:\Users\u589329\Desktop\angular\dashboard_backend\dashboard_backend\src\configs\test.json
undefined:1
{
^

SyntaxError: Unexpected token  in JSON at position 0
    at JSON.parse (<anonymous>)
    at SolaceConnectionParser.parse (C:\Users\u589329\Desktop\angular\dashboard_backend\dashboard_backend\src\app\solace\SolaceConnectionParser.js:9:31)
    at Object.<anonymous> (C:\Users\u589329\Desktop\angular\dashboard_backend\dashboard_backend\src\app\solace\SolaceConnectionParser.js:26:31)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
    at startup (internal/bootstrap/node.js:283:19)

【问题讨论】:

  • 错误告诉您 JSON 格式错误且无效。你看过 JSON 吗?
  • 嘿,是的,我添加了test.json 文件。它的结构正确,这就是我感到困惑的原因

标签: node.js json


【解决方案1】:

JSON 对象表示为Strings,fs.readFileSync() 返回一个Buffer

改变

const rawData = fs.readFileSync(filepath, 'utf-8');

const rawData = fs.readFileSync(filepath, 'utf-8').toString();

你应该很高兴。

【讨论】:

  • 啊,试过了,但得到了以下结果:SyntaxError: Unexpected token u in JSON at position 1。还更新了我在问题中的代码以使其更简单。
  • 有什么想法吗?这里有点迷路
【解决方案2】:

在应用 Rob Raisch 的答案并修剪字符串后,问题就解决了。

const rawData = fs.readFileSync(filepath, 'utf-8').toString().trim();

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 2017-12-15
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2018-04-28
    相关资源
    最近更新 更多