Nodejs:JSONStream解析方法正则表达式

Posted

技术标签:

【中文标题】Nodejs:JSONStream解析方法正则表达式【英文标题】:Nodejs: JSONStream parse method regex 【发布时间】:2014-02-02 10:41:54 【问题描述】:

我有一个这样的有效载荷


    "rows": [
        "id": "1234",
        "data": 
            "updatedby": "uid1",
            "resource": 
                "resourceid": "abcd"
            
        
    , 
        "id": "1235",
        "data": 
            "updatedby": "uid2",
            "resource": 
                "resourceid": "pqrs"
            
        
    , 
        "id": "1236",
        "data": 
            "updatedby": "uid3",
            "resource": 
                "resourceid": "bert"
            
        
    ]

我只需要从 json 有效负载中提取 RESOURCE 标记的内容。你能帮我制定正则表达式吗?以下是我尝试过的,它没有调用 parser.data 方法。

var parser = JSONStream.parse(['rows', true, /^resource/]);

parser.on('data', function(data) 
    console.log('received the payload -do something');
);

【问题讨论】:

你为什么需要一个正则表达式呢?它是一个 JSON 对象,您可以使用 obj['rows'][0]['data']['resource'] 之类的键访问值 @rednaw:如果 OP 的数据集很大,它就装不下内存。 确实,我没有直接访问该对象,因为它可能会因内存而失败。使用流媒体,内存不会成为问题 【参考方案1】:

您不需要正则表达式:

var JSONStream = require('JSONStream');
var fs = require('fs');

fs.createReadStream('data.json')
.pipe(JSONStream.parse('rows.*.data.resource'))
.on('data', console.log.bind(console))

哪个输出:

 resourceid: 'abcd' 
 resourceid: 'pqrs' 
 resourceid: 'bert' 

【讨论】:

谢谢。我从 HTTP 响应中读取并流式传输它。不太清楚为什么我以前尝试过同样的方法时它不起作用。现在可以使用了! 你能帮我解决这些问题吗?我们什么时候必须使用正则表达式,任何解释如何构建表达式的文档? 例如要返回rows.*.data.resourcerows.*.data.result,您可以对最后一项使用正则表达式:JSONStream.parse(['rows', true, 'data', /res(ource|ult)/]) 谢谢保罗。不幸的是,我没有足够的积分来投票 @PaulMougel 我们如何按值使用类似的过滤器?假设我们需要找到 resourceid='abcd'。

以上是关于Nodejs:JSONStream解析方法正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS:读取一个大的 csv 文件

如何通过node.js中的JSONStream模块解析一个大的、换行符分隔的JSON文件?

解析正则表达式的使用方法

python爬虫--解析网页几种方法之正则表达式

正则表达式解析

MySQLx 尝试解析表达式时出错(Nodejs)