【问题标题】:Node.JS: Cannot parse JSON fileNode.JS:无法解析 JSON 文件
【发布时间】:2021-09-27 20:50:00
【问题描述】:

更新:解决了。原来有一个不受欢迎的不可见的第一个字节。谢谢大家的帮助!我用const xData = data.substr(1)删除了它


似乎是一件容易的事,事实上确实如此,但我试图解析一个特定的 JSON 文件,但我根本做不到。

这个 JSON 文件被系统识别为 HTML 文件(根据file 命令,因为它上面有大量的 HTML)。我尝试了一些在线解析器,他们都说JSON很好。

其他文件也能正常识别。

在 macOS Mojave、Node.JS 8.15.0 上运行,所有文件都以 UTF-8 编码。

有什么线索可以在这里做什么吗?


编辑:JSON 内容:

{
"success": true,
"data": [
    {
        "id": "24971",
        "title": " Funcionament d'un vehicle històric: L'Ou ja es mou",
        "image": "http://www.vilanova.cat/content/agenda/24971/LITTLEOU(2).JPG",
        "description": "<p>Circulació de l'Ou, una dresina d'obres de 194o. Aquesta activitat permet als visitants experimentar en tren per la nova via de contorn del Museu, des del baixador del Pont de Pineda fins al del Pont de Senyals, situats al passeig Entrevies.</p><p>Aquest vehicle construït el 1940, s'utilitzava per a facilitar els desplaçaments dels professionals del ferrocarril als diferents punts de les línies i poder fer les inspeccions o el manteniment de vies i el seguiment d'obres. És protagonista d'un conte de infantil de la col·lecció del Museu, titulat \"L'Ou que es mou\".</p>",
        "start_date": "20/01/2019",
        "end_date": "20/01/2019",
        "start_hour": "11:30",
        "end_hour": "13:30",
        "timetable": "<p> De les 11:30 a les 13:30</p>",
        "price": "Gratuït, inclós en qualsevol de les tarifes vigents d'emtrada al Museu",
        "location": "Museu del Ferrocarril de Catalunya. Vilanova i la Geltrú",
        "location_id": "1363",
        "address": "Plaça d'Eduard Maristany,     s/n",
        "x": "393725.02",
        "y": "4564273.16",
        "lon": "1.7310247183221",
        "lat": "41.2210496477307"
    }
]
}

代码:

const fs = require('fs')

const data = fs.readFileSync("./result.json", 'utf-8')
const json = JSON.parse(data)

错误:

SyntaxError: Unexpected token  in JSON at position 0
    at JSON.parse (<anonymous>)
    at Object.<anonymous> (/Users/kyngo/Development/OpenDataImporter/reader.js:4:19)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Function.Module.runMain (module.js:694:10)
    at startup (bootstrap_node.js:204:16)
    at bootstrap_node.js:625:3

【问题讨论】:

  • 这很可能是因为您的路径错误,返回的是 HTML 404 页面,而不是 JSON 响应。检查开发工具(来源),并告诉我。
  • 如果没有文件内容或您的服务器代码,我怀疑任何人都能够为您提供任何帮助。
  • @Lissy 路径没有错,我检查了三次,数据没问题。
  • @MadWard 你是对的,让我尽快更新。
  • @Kyngo 提供开发工具的详细信息,以便我们为您提供帮助。

标签: node.js json file


【解决方案1】:

我终于设法解决了这个问题。问题是隐藏字符(字符串的第一个字节),导致 JSON.parse() 方法失败。我为绕过它所做的如下:const xData = data.substr(1).

【讨论】:

  • 我不建议这样修剪它。相反,您应该从文件本身中删除多余的字节;当您的应用程序的其他部分不考虑该字节时,像这样保持字节完整的解决方法将导致更多错误。
  • 这也是一个选项。结果是将xData 的内容保存到该文件中,因为我从它的源中得到它,我无法控制它。
【解决方案2】:

试试这个:

    import fs from 'fs';
    fs.readFile('./result.json', 'utf8', (err, data) => {
      if (err) throw err;
      const obj = JSON.parse(data);
      console.log('title', obj.data.title);
    });

【讨论】:

  • SyntaxError: Unexpected token in JSON at position 0 at JSON.parse (&lt;anonymous&gt;) at /Users/kyngo/Development/OpenDataImporter/reader.js:5:18 at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:511:3)
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 2020-12-15
  • 2015-06-28
  • 1970-01-01
  • 2017-10-20
  • 2017-04-06
  • 2012-05-10
相关资源
最近更新 更多