Mat*_*att 550 javascript json node.js
我正在对Node.js进行一些实验,并希望从文本文件或.js文件(更好的??)中读取JSON对象到内存中,以便我可以从代码中快速访问该对象.我意识到那里有Mongo,Alfred等东西,但这不是我现在所需要的.
如何使用JavaScript/Node从文本或js文件和服务器内存中读取JSON对象?
mih*_*hai 1106
同步:
var fs = require('fs');
var obj = JSON.parse(fs.readFileSync('file', 'utf8'));
Run Code Online (Sandbox Code Playgroud)
异步:
var fs = require('fs');
var obj;
fs.readFile('file', 'utf8', function (err, data) {
if (err) throw err;
obj = JSON.parse(data);
});
Run Code Online (Sandbox Code Playgroud)
Tra*_*ell 369
我发现这样做的最简单方法是使用require
和JSON文件的路径.
例如,假设您有以下JSON文件.
test.json
{
"firstName": "Joe",
"lastName": "Smith"
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用在.atn.js应用程序中轻松加载它 require
var config = require('./test.json');
console.log(config.firstName + ' ' + config.lastName);
Run Code Online (Sandbox Code Playgroud)
Flo*_*ine 56
异步是有原因的!在@mihai扔石头
否则,这是他用于异步版本的代码:
// Declare variables
var fs = require('fs'),
obj
// Read the file and send to the callback
fs.readFile('path/to/file', handleFile)
// Write the callback function
function handleFile(err, data) {
if (err) throw err
obj = JSON.parse(data)
// You can now play with your datas
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*des 37
至少在Node v8.9.1中,你可以做到
var json_data = require('/path/to/local/file.json');
并访问JSON对象的所有元素.
J P*_*J P 15
在Node 8中,您可以使用内置函数util.promisify()
来异步读取这样的文件
const {promisify} = require('util')
const fs = require('fs')
const readFileAsync = promisify(fs.readFile)
readFileAsync(`${__dirname}/my.json`, {encoding: 'utf8'})
.then(contents => {
const obj = JSON.parse(contents)
console.log(obj)
})
.catch(error => {
throw error
})
Run Code Online (Sandbox Code Playgroud)
在现代 JavaScript 中,这可以单行完成,无需安装额外的包:
import { readFile } from 'fs/promises';
let data = JSON.parse(await readFile("filename.json", "utf8"));
Run Code Online (Sandbox Code Playgroud)
try/catch
根据需要添加一个块来处理异常。
使用node-fs-extra (异步等待)
const readJsonFile = async () => {
const myJsonObject = await fs.readJson('./my_json_file.json');
console.log(myJsonObject);
}
readJsonFile() // prints your json object
Run Code Online (Sandbox Code Playgroud)
使用fs-extra包非常简单:
同步:
const fs = require('fs-extra')
const packageObj = fs.readJsonSync('./package.json')
console.log(packageObj.version)
Run Code Online (Sandbox Code Playgroud)
异步:
const fs = require('fs-extra')
const packageObj = await fs.readJson('./package.json')
console.log(packageObj.version)
Run Code Online (Sandbox Code Playgroud)
2023 年的答案,使用导入属性
import jsObject from "./test.json" assert {type: "json"};
console.log(jsObject)
Run Code Online (Sandbox Code Playgroud)
动态导入
const jsObject = await import("./test.json", {assert: {type: "json"}});
console.log(jsObject);
Run Code Online (Sandbox Code Playgroud)
更多信息:tc39 /提案导入属性
归档时间: |
|
查看次数: |
491563 次 |
最近记录: |