使用Node.js解析JSON

如何从字符串解析JSON,以及如何在Node.js中读取JSON文件

如果你有JSON格式数据作为字符串的一部分,解析它的最佳方法是使用JSON.parse方法自ECMAScript 5起成为JavaScript标准的一部分,由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()足够聪明,可以理解这一点,并在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手册


更多节点教程: