js读取服务器json文件,关于javascript:使用node.js,如何将JSON文件读取到(服务器)内存中?...

2023-05-16

背景

我正在用node.js做一些实验,想从文本文件或.js文件(哪个更好)中读取JSON对象??)进入内存,以便我可以从代码中快速访问该对象。我知道外面有蒙古人、阿尔弗雷德等东西,但这不是我现在需要的。问题

如何使用javascript/node从文本或JS文件中读取JSON对象并将其读取到服务器内存中?

什么叫服务器内存?您的nodejs脚本将工作只要您使其工作,但您必须将数据存储在某个地方,除非您使nodejs脚本持久化。

同步:

var fs = require('fs');

var obj = JSON.parse(fs.readFileSync('file', 'utf8'));

设置:

var fs = require('fs');

var obj;

fs.readFile('file', 'utf8', function (err, data) {

if (err) throw err;

obj = JSON.parse(data);

});

我认为json.parse是同步的,它直接来自V8,这意味着即使使用异步方式,人们也必须小心处理大型的json文件。因为它会把节点绑起来。

为了完整。它们存在一个名为jsonfile的NPM。

这是怎么回事?@mihai async json错误注册表代码

我真不敢相信这么简单的事情竟然找不到。我从谷歌得到的每一个答案都是在做一个httprequest或者使用jquery或者在浏览器中做的。

两点:(1)同步答案应该是let imported = require("file.json")。(2)json.parse必须是异步的,因为我使用此代码将70MB的json文件作为对象加载到内存中。这样需要几毫秒,但如果我使用require(),它就会发出嘎嘎声。

还有一点:这是异步的,但不是流式的。为此,您需要一个库(例如oboe.js)。区别在于异步不会阻塞您的执行线程,但是除非您进行流式处理,否则您仍然会看到大量的内存消耗峰值(比如处理70MB JSON文件的450MB内存)。

@Kylebaker JSON.parse是同步的。require比JSON.parse做得更多。JSON.parse只是在分析JSON。require正在分析javascript。我相信你能弄明白为什么后者比较慢。

太好了,谢谢你:)我试着使用require("file.json"),它工作得很好,但是我的file.json的路径并不是每个操作系统都能修复的,所以它现在失败了,它工作得很好。谢谢

对于在2019年及以后找到这个答案的人来说,node.js已经通过require为许多版本提供了本机JSON支持,如果您只想加载一个JSON文件,这个答案将不再适用。只需使用let data = require('./yourjsonfile.json')就可以了(需要注意的是,如果require的性能影响到代码,那么除了"想要加载一个.json文件"之外,还存在很多问题)

我有一个双向的easiest发现这是只使用你的requireJSON文件的路径。

例如,你有一个suppose下面的JSON文件。

test.json

{

"firstName":"Joe",

"lastName":"Smith"

}

你可以很容易地加载,然后在你的应用程序使用requireNode.js这

var config = require('./test.json');

console.log(config.firstName + ' ' + config.lastName);

大家都知道,如果我没记错的话,节点中的require会同步运行。在这里潜水

@对我有用的ram可能是你在test.json的位置不同于他的例子。我用的是node 5.0。

这种方法的另一个问题/好处是缓存了所需的数据,除非您专门删除了缓存的实例。

"require"用于在应用程序的整个生命周期内加载正在使用的模块或配置文件。使用此项加载文件似乎不正确。

对我来说,这不起作用:(

我不知道,谢谢!

我认为这可能是一个安全威胁。如果正在加载的JSON文件包含JS代码,require会运行该代码吗?如果是这样,那么您确实需要控制JSON文件的来源,否则攻击者可能会在您的计算机上运行恶意代码。

异步是有原因的!在抛出的石头"米哈伊

此外,这里使用的是异步的代码和版本:

// 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

}

同意:),还添加了Async

太好了:-)不过,我不喜欢内联回调,这会导致回调噩梦,我宁愿避免。

它在那里是有原因的。除非你想同步。

至少在v8.9.1节点,你可以去

var json_data = require('/path/to/local/file.json');

和访问的所有元素的JSON对象。

这种方法只加载一次文件。如果在新的需求(不重新启动程序)之后更改file.json,数据将从第一次加载开始。我没有来源支持这个,但我在我正在构建的应用程序中有这个

你的回答令人遗憾地不完整。得到的是一个对象,甚至不需要实现ToString()。

@gray这个问题希望能够以对象而不是字符串的形式访问对象。卢卡斯在一期杂志上提到,这个答案很好。

使用require还将执行文件中的任意代码。这种方法不安全,我建议不要使用它。

对8节点可以使用内置的util.promisify()asynchronously读到像这样的文件

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

})

.readFile已经是异步的,如果您要查找同步版本,它的名称是.readFileSync。

如果您想使用承诺,那么从节点10开始还有fs/promises。注:该API是实验性的:nodejs.org/api/fs.html fs fs承诺api

https://nodejs.org /区/最新的API - v6.x /文档/ FS FS / fs.html # _ _ ReadFile _ _ _回调选项文件

var fs = require('fs');

fs.readFile('/etc/passwd', (err, data) => {

if (err) throw err;

console.log(data);

});

// options

fs.readFile('/etc/passwd', 'utf8', callback);

https://nodejs.org /区/最新的API - v6.x /文档/ FS FS / fs.html # _ _ readfilesync _ _选项文件

你可以找到所有的日志文件在文件系统(Node.js的!希望这帮助你!

parseit function(){

return new Promise(function(res){

try{

var fs = require('fs');

const dirPath = 'K:\\merge-xml-junit\\xml-results\\master.json';

fs.readFile(dirPath,'utf8',function(err,data){

if(err) throw err;

res(data);

})}

catch(err){

res(err);

}

})

}

异步函数测试(){

jsonData = await parseIt();

var parsedJSON = JSON.parse(jsonData);

var testSuite = parsedJSON['testsuites']['testsuite'];

console.log(testSuite);

}

试验();

如果你正在寻找完整的解决方案,从Relative PathAsyncJSON文件,加载与错误处理

// Global variables

// Request path module for relative path

const path = require('path')

// Request File System Module

var fs = require('fs');

// GET request for the /list_user page.

router.get('/listUsers', function (req, res) {

console.log("Got a GET request for list of users");

// Create a relative path URL

let reqPath = path.join(__dirname, '../mock/users.json');

//Read JSON from relative path of this file

fs.readFile(reqPath , 'utf8', function (err, data) {

//Handle Error

if(!err) {

//Handle Success

console.log("Success"+data);

// Parse Data to JSON OR

var jsonObj = JSON.parse(data)

//Send back as Response

res.end( data );

}else {

//Handle Error

res.end("Error:"+err )

}

});

})

目录结构:

afc1595aadffc8c524b254db32e8844d.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js读取服务器json文件,关于javascript:使用node.js,如何将JSON文件读取到(服务器)内存中?... 的相关文章

随机推荐