/

在Node.js中解析JSON

在Node.js中解析JSON

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

如果您有一個字符串作為一部分的JSON數據,最好的方法是使用JavaScript標準的JSON.parse方法來解析數據。自ECMAScript 5以來,這個方法已經提供給V8,這是Node.js所使用的JavaScript引擎。

示例:

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

請注意,JSON.parse是同步的,所以JSON文件越大,你的程序執行時間也會越長,因為需要阻塞程序執行直到解析完成。

你可以通過將其放在一個promise和setTimeout調用中,以異步方式處理JSON。這確保解析在事件循環的下一次迭代中進行。

1
2
3
4
5
6
7
8
9
10
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()

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

由於你使用了.json擴展名,所以require()足夠聰明,會自動解析JSON數據到data對象中。

唯一的一個缺點是文件讀取是同步的方式進行的。此外,require()的結果會被緩存,所以如果您因為更新了文件而再次調用它,直到程序退出之前,您將無法獲取新的內容。

這個功能用於使用JSON文件作為應用程序配置的一部分,這是一個完全有效的使用場景。

您還可以手動讀取文件,使用fs.readFileSync

1
2
3
4
5
6
7
8
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
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)
}
})

tags: [“Node.js”, “JSON”, “JavaScript”]