Node.JS: невозможно проанализировать файл JSON - PullRequest
0 голосов
/ 16 января 2019

ОБНОВЛЕНИЕ : Решено. Оказывается, был нежелательный невидимый первый байт. Спасибо за вашу помощь! Я удалил это с 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 голосов
/ 16 января 2019

Мне наконец удалось это решить. Проблема заключалась в скрытом символе (первом байте строки), из-за которого метод JSON.parse() не удался. Что я сделал, чтобы обойти это следующее: const xData = data.substr(1).

0 голосов
/ 16 января 2019

Попробуйте это:

    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);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...