使用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手冊


更多節點教程: