Tag: parsing

Javascript将string转换为对象数组

我有一个NodeJS应用程序接受一个string(上传的input !)我没有控制input我只是build立一个REST服务来处理数据。 该string意味着一个JSON对象 数组 ,然后我可以通过循环来提取每个元素… 我收到以下(作为string): [ {Name: 'Jane', Id: '005b0000000MGa7AAG'}, {Name: 'Tom', Id: '005b0000000MGa7AAF'} ] 当我尝试JSON.parse这个我得到 SyntaxError: Unexpected token N 所以可以理解,因为我知道这是无效的JSON 而这下一个string是有效的JSON并通过http://jsonlint.com/ : [ {"Name": "Jack", "Id": "005b0000000MGa7AAA"}, {"Name": "Jill", "Id": "005b0000000MGa7AAB"} ] 我的问题是: 我如何接受第一个input并parsing它以允许: parsed[0]['Name'] == 'Jane' >> true 我的第一本能是将stringreplace(例如名称为“名称”),然后尝试parsing它。 但是,如果有其他人有解决办法,我会很感激。

是否有一个asynchronousJSONparsing器的Node模块不会将整个JSONstring加载到内存中?

我意识到有很多Node模块提供了parsingJSON的asynchronousAPI ,但是其中许多模块似乎将整个文件或stream读入内存,构build一个巨大的string,然后将其传递给JSON.parse() 。 这是“如何使用NodeJSparsingJSON?”的第二个答案。 build议 ,而且正是jsonfile模块所做的。 构build一个巨大的string正是我想要避免的。 我想要一个像这样的API: parseJsonFile(pathToJsonFile): Promise 返回的Promiseparsing为parsing的JSON对象。 这个实现应该使用恒定的内存量。 我对任何类似SAX的东西都不感兴趣,因为在parsing各种片断时广播事件只是最终的结果。 我认为jsonparse可以做我想做的事情(它明显包括了parsingJSON而不使用JSON.parse() )的逻辑,但是在README.md没有简单的例子, 示例目录中的一个文件看起来过于复杂。

如何有效地读取字节的位?

我正在开发一个包含WebSockets的项目,服务器(Node.js)和客户端(Chrome)之间的数据使用自定义(非常简单)的格式发送,用于我设置的数据交换。 我正在发送3位数据,因为我发送了所有有8种可能性的项目。 数据格式如下所示: 0 1 bit index 01234567 8901… item aaabbbcc cddd… 目前,我正在parsing像这样的字节的项目: var itemA = bytes[0] >> 5; var itemB = (bytes[0] >> 2) & 7; var itemC = (bytes[0] & 3) << 1 | bytes[1] >> 7; var itemD = (bytes[1] >> 4) & 7; 就个人而言,这感觉太复杂了。 问题是,它只是复杂的,因为我得到的字节数是8的倍数。要parsing出3位的项目,我必须进行位移,执行AND操作,因为8不能被3整除有时甚至必须像itemC那样结合两个字节的itemC 。 以3位组而不是8位组读取这些数据会更加有效。 我想到的是使用.toString(2)将所有字节转换为一个string,然后使用.substring得到一个长度为3的子string,并转换回一个数字parseInt(bitString, 2) ,但我想这不是做这件事的方式,因为string操作很慢,我实际上没有做任何string相关的。 是否有可能读取例如3组中的位而不是从字节parsing它们? […]

如何parsing/标记Node.js中的SQL语句

我正在寻找一种方法来parsing/标记化Node.js应用程序中的SQL语句,以便: 标记所有在ISO / IEC 9075标准或这里定义的“基本”SQL关键字。 validationSQL语法。 找出查询要做什么(例如读或写?)。 你有任何解决scheme或build议偷看? 链接: 任何Javascript / Jquery库validationSQL的声明? 我做了研究,并find了一些方法来做到这一点: 使用现有的node.js库 我做了一个谷歌search ,我没有find一个合意和stream行的图书馆使用。 我发现那些: simple-sql-parser ( github上22星,每天下载16个npm ) 仅支持SELECT,INSERT,UPDATE和DELETE 路上有一个v2分支 sql-parser ( github上的90颗星, npm上每天下载6颗) 只支持基本的SELECT语句 基于jison sqljs ( github上有17颗星, npm每天下载5颗) v0.0.0-3,正在开发中…完全没有文档:) 不幸的是,这些图书馆中没有一个是完全可信的。 基于node.js低级标记器库自己做 我可以用一个低级的tokenizer库来做到这一点,比如: jison ( github上的1,457颗星, npm上每天下载240颗星) tokenizer ( github上的44颗星, npm上每天下载10次) 基于现有的Javascript代码美化器自己做 CodeMirror是一个很酷的Javascript库(浏览器端),可以识别SQL关键字,string等。检查演示 。 我可以构build一个基于CodeMirror的node.js库标记器。 SQL模式在github上 ,我可以调整它来获取节点应用程序中的令牌。 PS: CodeMirror在github上有5046颗星,维护得很好。

对象的大数组JSON.parse()使用更多的内存比它应该的方式

我生成一个〜200'000元素的对象数组(使用map内部的对象文字符号,而不是new Constructor() ),并保存一个JSON.stringify的d版本到磁盘,它占用了31 MB包括换行符和每个缩进级别( JSON.stringify(arr, null, 1) )。 然后,在一个新的节点进程中,我将整个文件读入一个UTF-8string并传递给JSON.parse : var fs = require('fs'); var arr1 = JSON.parse(fs.readFileSync('JMdict-all.json', {encoding : 'utf8'})); 根据小牛的活动监视器,节点内存使用量约为1.05GB! 即使在terminal上键入,我感觉在我的古老的4 GB RAM机器上还是比较懒的。 但是,如果在一个新的节点进程中,我将文件的内容加载到一个string中,在元素边界处JSON.parse , JSON.parse每个元素,表面上获得相同的对象数组: var fs = require('fs'); var arr2 = fs.readFileSync('JMdict-all.json', {encoding : 'utf8'}).trim().slice(1,-3).split('\n },').map(function(s) {return JSON.parse(s+'}');}); 节点只使用〜200 MB的内存,并没有明显的系统滞后。 这种模式在节点的许多重新启动中持续存在: JSON.parse整个数组在parsing元素的过程中占用了一大笔内存,而且更高效地处理内存。 为什么在内存使用上有如此巨大的差距? 这是与JSON.parse防止高效隐藏类生成在V8中的问题? 如何在没有切分string的情况下获得良好的内存性能? 我必须使用stream式JSONparsing吗? 为了便于实验,我已经将JSON文件置于Gist中 ,请随时克隆它。

我怎样才能parsing一个string到适当的参数child_process.spawn?

我希望能够采取一个命令string,例如: some/script –option="Quoted Option" -d –another-option 'Quoted Argument' parsing成我可以发送给child_process.spawn : spawn("some/script", ["–option=\"Quoted Option\"", "-d", "–another-option", "Quoted Argument"]) 我发现的所有parsing库(例如minimist等)都是通过将其parsing为某种选项对象等来做太多的事情的 。我基本上想要Node的等价物来创buildprocess.argv 。 这看起来像是一个令人沮丧的漏洞,因为exec需要一个string,但是并不像spawn那样安全。 现在我正在用这个方法来解决这个问题: spawn("/bin/sh", ["-c", commandString]) 但是,我不希望这样强烈地绑定到UNIX(理想情况下它也可以在Windows上工作)。 HALP?

如何刮成千上万的PDF文件的表格?

我有大约1,500个PDF文件,每个文件只有1页,并且具有相同的结构(例如http://files.newsnetz.ch/extern/interactive/downloads/BAG_15m_kzh_2012_de.pdf )。 我正在寻找的是一种迭代所有这些文件(如果可能,本地)的方法,并提取表的实际内容(如CSV,存储到SQLite数据库,无论)。 我很想在Node.js中这样做,但找不到合适的库来parsing这些东西。 你知道吗? 如果在Node.js中不可行,我也可以用Python编写,如果有更好的方法可用的话。

我怎样才能在express.js玉器模板中进行降价?

我使用快速js框架。 我有一个从数据库markdownifiedstring,并希望在我的玉模板呈现为HTML。 我安装了node-markdown,想要这样渲染它: app.js var md = require("node-markdown").Markdown; template.jade – each note in todo.notes div= md(note.string) 但是,它不会打印出任何东西…有什么build议吗? 谢谢! 编辑:解决它自己,只是忘了把我的看法的MDvariables…

如何从JavaScript中的URL中提取主机?

捕获域直到结束字符$, \?, /, : 。 我需要一个正则expression式来捕获所有这些domian.com 。 domain.com:3000 domain.com?pass=gas domain.com/ domain.com

node.js从原始http请求string创build对象

我有一个原始的HTTP请求string,我需要创build一个对象表示。 而不是重新发明轮子,我正在考虑使用内部http分析器来获取http.IncomingMessage的一个实例 可能吗? 我想是因为string和完整的string没有太大的区别。 怎么做? 我看了一下源代码,他们得到一个请求parsing器如下 var HTTPParser = process.binding('http_parser').HTTPParser; var parser = new HTTPParser(HTTPParser.REQUEST) 编辑 从node.jstesting中取得一些进展 var request = Buffer(raw); var parser = new HTTPParser(HTTPParser.REQUEST); parser.execute(request, 0, request.length); 编辑2 一些事件处理者失踪(所有这些) parser.onHeadersComplete = function(res) { console.log('onHeadersComplete'); console.log(res); }; parser.onBody = function(body) { console.log('body done'); console.log(body.toString()); } parser.onMessageComplete = function(res) { console.log('done'); }; 谢谢