简单介绍JSONStream的使用
地址
作用
这个模块是根据需要筛选出json数据中自己所需要的数据
使用
var JSONStream = require("JSONStream");
var parse = require("fast-json-parse");
var fs = require("fs");
fs.createReadStream("./time.json")
.pipe(JSONStream.parse("rows.*.doc"))
.on("data", (data) => {
// 在这里处理每个 JSON 对象
console.log(data);
})
.on("end", () => {
console.log("所有数据已处理完毕");
});
parse参数介绍
- rows.*.doc 路径
- JSONStream.parse(‘rows.*.doc’) 是用于提取 JSON 中嵌套字段的路径。
- ‘rows.*.doc’ 表示你要从 JSON 数据中提取:
- rows 字段,它是一个数组。
-
- 是通配符,表示匹配 rows 数组中的每个元素。
- doc 表示从每个元素中提取 doc 属性。
// JSONStream.parse('rows.*.doc')
// json数据
{
"rows": [
{ "doc": { "id": "doc1", "content": "data1" } },
{ "doc": { "id": "doc2", "content": "data2" } }
]
}
// 输出
{ "id": "doc1", "content": "data1" }
{ "id": "doc2", "content": "data2" }
- … 操作符:递归下降操作符
- … 是 JSONPath 中的递归下降操作符,表示在 JSON 树中的任意深度查找匹配的节点。它会查找对象的子节点,不论深度如何。
// JSONStream.parse('..doc')
// json数据
{
"data": {
"info": {
"rows": [
{ "doc": { "id": "doc1" } },
{ "doc": { "id": "doc2" } }
]
}
}
}
// 输出
{ "id": "doc1" }
{ "id": "doc2" }
- 使用数组表示路径
- 数组中的元素可以是字符串、正则表达式、布尔值或函数,它们分别用于匹配对象的键、值或键名。
- JSONStream.parse([‘row’, true, /^doc/])
- ‘row’ 会匹配 row 键。
- true 会匹配所有键(即匹配 row 对象中的所有键)。
- /^doc/ 是正则表达式,匹配所有以 doc 开头的键。
// JSONStream.parse(['row', true, /^doc/])
// json数据
{
"row": {
"doc1": { "id": "doc1", "content": "data1" },
"doc2": { "id": "doc2", "content": "data2" }
}
}
// 输出
{ "id": "doc1", "content": "data1" }
{ "id": "doc2", "content": "data2" }
以上用法均来自gpt搜索, parse参数还有其他的类型,可以使用gpt搜索用法
放一张长截图