热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

背景我正在用node.js做一些实验,想从文本文件或.js文件(哪个更好)中读取JSON对象??)进入内存,以便我可以从代码

背景

我正在用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



推荐阅读
  • Django框架进阶教程:掌握Ajax请求的基础知识与应用技巧
    本教程深入探讨了Django框架中Ajax请求的核心概念与实用技巧,帮助开发者掌握异步数据交互的方法,提升Web应用的响应速度和用户体验。通过实例解析,详细介绍了如何在Django项目中高效实现Ajax请求,涵盖从基础配置到复杂场景的应用。 ... [详细]
  • 根据不同环境需求,利用 Vue CLI 的 `npm run build` 命令对项目进行定制化打包,如测试、预发布和生产环境。通过配置 `process.env` 变量,实现不同环境下接口和服务的动态切换,确保应用在各阶段都能高效运行和调试。 ... [详细]
  • 【前端开发】深入探讨 RequireJS 与性能优化策略
    随着前端技术的迅速发展,RequireJS虽然不再像以往那样吸引关注,但其在模块化加载方面的优势仍然值得深入探讨。本文将详细介绍RequireJS的基本概念及其作为模块加载工具的核心功能,并重点分析其性能优化策略,帮助开发者更好地理解和应用这一工具,提升前端项目的加载速度和整体性能。 ... [详细]
  • Select2.js下拉框应用总结与实践要点
    在使用Select2.js下拉框插件的过程中,积累了诸多实践经验与心得。尽管最初觉得Select2在某些方面不尽如人意,但在对比了其他选项后,发现其仍是最优选择。本文将详细探讨Select2.js的配置、优化技巧及常见问题解决方法,帮助开发者更好地利用这一强大的前端工具。 ... [详细]
  • npm 发布 WhalMakeLink 包:链接管理与优化的新选择
    WhalMakeLink 是一个强大的 npm 工具,专为项目管理和优化而设计。它能够自动在项目的 README 文件中生成当前工程目录下所有子项目的链接地址,极大提升了开发效率和文档维护的便捷性。通过简单的 `npm init` 命令即可快速启动和配置该工具,适用于各种复杂项目结构。 示例演示了其基本用法和功能。 ... [详细]
  • 使用 Vue 集成 iScroll 实现移动端表格横向滚动与固定列功能 ... [详细]
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 可转债数据智能抓取与分析平台优化
    本项目旨在优化可转债数据的智能抓取与分析平台。通过爬取集思录上的可转债信息(排除已发布赎回的债券),并结合安道全教授提出的三条安全线投资策略,新增了建仓线、加仓线和重仓线,以提供更精准的投资建议。 ... [详细]
  • 探索JavaScript倒计时功能的三种高效实现方法及代码示例 ... [详细]
  • Mongoose E11000 错误:集合中出现重复键问题分析与解决 ... [详细]
  • 构建顶级PHP博客系统:实践与洞见
    构建顶级PHP博客系统不仅需要扎实的技术基础,还需深入理解实际应用需求。本文以Zend Studio为开发环境,MySQL作为数据存储,Apache服务器为运行平台,结合jQuery脚本语言,详细阐述了从环境搭建到功能实现的全过程,分享了开发PHP博客管理系统的宝贵经验和实用技巧。 ... [详细]
  • 在Python 3环境中,当无法连接互联网时,可以通过下载离线模块包来实现模块的安装。具体步骤包括:首先从PyPI网站下载所需的模块包,然后将其传输到目标环境,并使用`pip install`命令进行本地安装。此方法不仅适用于单个模块,还支持依赖项的批量安装,确保开发环境的完整性和一致性。 ... [详细]
  • 这篇文章将揭示 Vue 和 React 组件库中五个鲜为人知的强大工具。这些工具均以纯 JavaScript 实现,功能卓越。其中,async-validator 是一个数据验证插件,不仅预置了 URL 和电子邮件的验证规则,还支持异步验证功能。 ... [详细]
  • 初次接触AJAX是在去年,当时主要是通过手动编写客户端代码来实现,还需处理被请求的页面,过程相当繁琐。尽管之前就听说过AJAX.NET,但一直没有机会深入了解。本文将作为初学者的指南,详细介绍AJAX.NET的基本概念、核心功能及其在实际项目中的应用技巧,帮助读者快速上手并掌握这一强大的开发工具。 ... [详细]
author-avatar
dsvsV
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有