Node.JS:无法解析JSON文件

时间:2019-01-16 11:07:30

标签: node.js json file

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

2 个答案:

答案 0 :(得分:0)

尝试一下:

    var fs = require('fs');
    var obj;
    fs.readFile('./result.json', 'utf8', function (err, data) {
      if (err) throw err;
      obj = JSON.parse(data);
      console.log('title', obj.data.title);
    });

答案 1 :(得分:0)

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