Преобразовать файл json из тела сервера в объект json на узле - PullRequest
0 голосов
/ 13 января 2019

Это должно быть так просто, но я застрял на нем больше часа, и это сводит меня с ума.

Я работаю с API, который возвращает данные в виде .json файлов. Мне удалось распаковать файлы, но теперь нужно проанализировать эти файлы для объектов json.

Данные находятся в буфере и выглядят так:

{ "name": "foo1", "job": "bar1" }
{ "name": "foo2", "job": "bar2" }
{ "name": "foo3", "job": "bar3" }
{ "name": "foo4", "job": "bar4" }

Конечно, синтаксический анализ с JSON.parse() завершается неудачно, потому что данные - это .json файл, а не массив jsons.

Как я могу правильно проанализировать эти данные? fs ожидает filepath для чтения файла, что не сработает в моем случае (насколько я знаю), потому что данные поступают из буфера, а не из локального файла.

tl; dr: Как мне разобрать файл .json, у которого нет пути к файлу?

Ответы [ 2 ]

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

Прежде всего, приведенный вами пример (где каждая строка является строкой, представляющей объект JSON) не является файлом JSON.

Это файл, содержащий несколько строк в формате JSON, по одной на строку.

Без окружающего массива неудивительно, что вы не можете его проанализировать.

Я также не уверен, что вы подразумеваете под данными, хранящимися в буфере.

Вы имеете в виду, что вы прочитали содержимое файла, используя стандартный fs.readfile() или вариант?

Если это так, вам необходимо преобразовать Buffer, возвращенный из вашего файла чтения, в String, как в:

var contents = fs.readfileSync(FILEPATH).toString()

Как только вы это сделаете, вы можете создать массив, используя содержимое вашего файла, и преобразовать результат в строку в формате JSON, используя:

fs.readfile(FILEPATH, (err, buf) => {
  if (err) {
    throw err
  }

  let objAry = []
  buf.toString().split(/\r?\n/).forEach( line => {
    objAry.push(JSON.parse(line))
  })

  let jsonStr = JSON.stringify(objAry)

  // do something with the result string
  // possibly sending it as a response to an API
  // request as ‘Content-Type: application/json’
})

Очевидно, вы захотите добавить к этому обработку ошибок (try / catch).

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

вы можете изменить данные буфера на utf-8 charset String, а затем проанализировать их:

JSON.parse(buffer.toString('utf-8'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...