使用 JSONPath 和 JSONStream 解析 json 流

Posted

技术标签:

【中文标题】使用 JSONPath 和 JSONStream 解析 json 流【英文标题】:parsing json streams using JSONPath and JSONStream 【发布时间】:2017-02-05 19:00:06 【问题描述】:

我有这样的数据流:

"foo": 1 "bar": 2

注意:这些地图之间没有逗号。

我想在 node.js 中读取这个流,以便我可以捕获两个映射,如上所示。我一直在尝试使用 JSONStream 来做到这一点,它擅长识别流中的离散 JSON 实体,但它会在某种程度上改变数据。所以我运行的代码是:

var jsonStream = require('JSONStream');
var es = require('event-stream');

var parser = jsonStream.parse('$*');
process.stdin.pipe(parser)
.pipe(es.mapSync(function (data) 
    console.log(data);
));

这个输出:

 value: 1, key: 'foo' 
 value: 2, key: 'bar' 

我希望它输出未更改的 JSON 映射:

"foo": 1
"bar": 2

任何人都知道我如何使用 JSONStream 或其他东西来实现这一点?

【问题讨论】:

【参考方案1】:

看起来 JSONStream 不仅仅是解决这个问题所需要的,它在后台使用 jsonparse,所以我的问题的解决方案是:

var Parser = require('jsonparse');

var parser = new Parser();
process.stdin.on("readable", function () 
    var chunk = process.stdin.read();
    if (chunk) 
        parser.write(chunk);
    
);

parser.onValue = function (v) 
    if (this.stack.length === 0) 
        console.log(v);
    
;

【讨论】:

以上是关于使用 JSONPath 和 JSONStream 解析 json 流的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSONStream 读取大型 JSON 文件

如何使用 JSONStream 对大对象进行字符串化

node.js - JSONStream 期间的无限循环

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

@aws-sdk/lib-storage 使用 JSONStream.stringify() 将 JSON 从 MongoDB 流式传输到 S3

Python爬虫 JsonPath -- JsonPath的安装和基本使用