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.resource
和rows.*.data.result
,您可以对最后一项使用正则表达式:JSONStream.parse(['rows', true, 'data', /res(ource|ult)/])
谢谢保罗。不幸的是,我没有足够的积分来投票
@PaulMougel 我们如何按值使用类似的过滤器?假设我们需要找到 resourceid='abcd'。以上是关于Nodejs:JSONStream解析方法正则表达式的主要内容,如果未能解决你的问题,请参考以下文章