If you have JSON data as part of a string, the best way to parse it is by using the JSON.parse
method that’s part of the JavaScript standard since ECMAScript 5, and it’s provided by V8, the JavaScript engine that powers Node.js.
如果您将JSON数据作为字符串的一部分,则解析它的最佳方法是使用JSON.parse
方法,该方法是ECMAScript 5以来JavaScript标准的一部分,并且由V8提供,它是为Node.js提供支持JavaScript引擎。
Example:
例:
const data = '{ "name": "Flavio", "age": 35 }'
try {
const user = JSON.parse(data)
} catch(err) {
console.error(err)
}
Note that JSON.parse
is synchronous, so the more the JSON file is big, the more time your program execution will be blocked until the JSON is finished parsing.
请注意, JSON.parse
是同步的,因此JSON文件越大,在JSON完成解析之前,您的程序执行将被阻塞的时间越长。
You can process the JSON asynchronously by wrapping it in a promise and a setTimeout call, which makes sure parsing takes place in the next iteration of the event loop:
您可以通过将其包装在promise和setTimeout调用中来异步处理JSON,以确保解析在事件循环的下一次迭代中进行:
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))
If your JSON is in a file instead, you first have to read it.
如果您的JSON位于文件中,则首先必须阅读它。
A very simple way to do so is to use require()
:
一种非常简单的方法是使用require()
:
const data = require('./file.json')
Since you used the .json
extension, require()
is smart enough to understand that, and parse the JSON in the data
object.
由于您使用的是.json
扩展名,所以require()
足够聪明,可以理解它并解析data
对象中的JSON。
One caveat is that file reading is synchronous. Plus, the result of the require() call is cached, so if you call it again because you updated the file, you won’t get the new contents until the program exits.
一个警告是文件读取是同步的。 另外,require()调用的结果将被缓存,因此,如果由于更新文件而再次调用它,则在程序退出之前您将无法获得新内容。
This feature was provided to use a JSON file for the app configuration, and it’s a perfectly valid use case.
提供此功能是为了使用JSON文件进行应用程序配置,这是一个非常有效的用例。
You can also read the file manually, using fs.readFileSync
:
您也可以使用fs.readFileSync
手动读取文件:
const fs = require('fs')
const fileContents = fs.readFileSync('./file.json', 'utf8')
try {
const data = JSON.parse(fileContents)
} catch(err) {
console.error(err)
}
This reads the file synchronously.
这将同步读取文件。
You can also read the file asynchronously using fs.readFile
, and this is the best option. In this case, the file content is provided as a callback, and inside the callback you can process the JSON:
您也可以使用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)
}
})