Node.JS:无法解析JSON文件

Node.JS:无法解析JSON文件,node.js,json,file,Node.js,Json,File,更新:解决了它。原来有一个不需要的不可见的第一个字节。谢谢大家的帮助!我用const-xData=data.substr(1) 这似乎是一件容易的事情,事实上确实如此,但我正试图解析一个特定的JSON文件,但我就是做不到 这个JSON文件被系统识别为HTML文件(根据file命令,因为它上面有大量HTML)。我尝试了一些在线解析器,他们都说JSON很好 其他文件也可以识别 在macOS Mojave上运行,Node.JS 8.15.0,所有文件都以UTF-8编码 这里有什么线索吗 编辑:JS

更新:解决了它。原来有一个不需要的不可见的第一个字节。谢谢大家的帮助!我用
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"
    }
]
}
错误:

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

SyntaxError:JSON中位于位置0的意外标记
在JSON.parse()处
反对。(/Users/kyngo/Development/OpenDataImporter/reader.js:4:19)
编译(Module.js:653:30)
在Object.Module.\u extensions..js(Module.js:664:10)
在Module.load(Module.js:566:32)
在tryModuleLoad时(module.js:506:12)
在Function.Module.\u加载(Module.js:498:3)
位于Function.Module.runMain(Module.js:694:10)
启动时(bootstrap_node.js:204:16)
在bootstrap_node.js:625:3
试试这个:

    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);
    });

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

很可能是因为您的路径错误,返回的是HTML 404页面,而不是JSON响应。检查开发工具(源代码),然后告诉我。如果没有文件内容或服务器代码,我怀疑任何人都能对您有所帮助。@Lissy path没有错,我检查了三次,数据没有问题。@MadWard您是对的,让我尽快更新。@Kyngo提供开发工具的详细信息,所以我们可以帮助您。
SyntaxError:JSON中的意外标记位于JSON.parse()的位置0处,位于/Users/kyngo/Development/OpenDataImporter/reader.js:5:18处,位于FSReqWrap.readFileAfterClose[as oncomplete](fs.js:511:3)
我不建议这样修剪它。相反,您应该从文件本身中删除额外的字节;类似这样的解决方法,保留字节不变,当你的应用程序的其他部分没有考虑到该字节时,会导致更多的bug。这也是一个选择。结果将是将
xData
的内容保存到该文件中,因为我从它的源代码获得它,而我无法控制它。
    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);
    });