Разбор JSON с помощью Node.js

Как разобрать JSON из строки и как прочитать файл JSON в Node.js

Если у вас естьJSONданные как часть строки, лучший способ проанализировать их - использоватьJSON.parseметод, который является частью стандарта JavaScript, начиная с ECMAScript 5, и предоставляетсяV8, движок JavaScript, на которомNode.js.

Пример:

const data = '{ "name": "Flavio", "age": 35 }'
try {
  const user = JSON.parse(data)
} catch(err) {
  console.error(err)
}

Обратите внимание, чтоJSON.parseявляется синхронным, поэтому чем больше размер JSON-файла, тем больше времени будет блокироваться выполнение вашей программы, пока JSON не закончит синтаксический анализ.

Вы можете обрабатывать JSON асинхронно, заключив его вобещатьи вызов setTimeout, который обеспечивает выполнение синтаксического анализа на следующей итерации цикла событий:

const parseJsonAsync = (jsonString) => {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(JSON.parse(jsonString))
    })
  })
}

const data = ‘{ “name”: “Flavio”, “age”: 35 }’ parseJsonAsync(data).then(jsonData => console.log(jsonData))

Если вместо этого ваш JSON находится в файле, вам сначала нужно его прочитать.

Очень простой способ сделать это - использоватьrequire():

const data = require('./file.json')

Поскольку вы использовали.jsonрасширение,require()достаточно умен, чтобы понять это, и проанализировать JSON вdataобъект.

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

Эта функция была предоставлена для использования файла JSON для конфигурации приложения, и это вполне допустимый вариант использования.

Вы также можете прочитать файл вручную, используяfs.readFileSync:

const fs = require('fs')
const fileContents = fs.readFileSync('./file.json', 'utf8')

try { const data = JSON.parse(fileContents) } catch(err) { console.error(err) }

Это синхронно читает файл.

Вы также можете прочитать файл асинхронно, используяfs.readFile, и это лучший вариант. В этом случае содержимое файла предоставляется как обратный вызов, а внутри обратного вызова вы можете обработать JSON:

const fs = require('fs')

fs.readFile(’/path/to/file.json’, ‘utf8’, (err, fileContents) => { if (err) { console.error(err) return } try { const data = JSON.parse(fileContents) } catch(err) { console.error(err) } })

Скачать мою бесплатнуюСправочник по Node.js


Дополнительные руководства по узлам: