Bry*_*can 9 javascript json node.js
我已经看到了这个问题很老的答案,2年前使用的许多技术都发生了变化.
我所拥有的是由数据库发送到我的服务器的JSON文件,我想知道的是如何过滤该数据.
我正在使用node.js运行服务器,我想做的是:
var results = QueryLibrary.load(jsondata);
var filtered = results.query('select where user = "user1"');
Run Code Online (Sandbox Code Playgroud)
如何在节点中运行的javascript中执行此类操作?
Tha*_*you 23
var _ = require("underscore");
var json = '[{"user": "a", "age": 20}, {"user": "b", "age": 30}, {"user": "c", "age": 40}]';
var users = JSON.parse(json);
var filtered = _.where(users, {user: "a"});
// => [{user: "a", age: 20}]
Run Code Online (Sandbox Code Playgroud)
另一个实用程序库Lo-Dash具有相同操作的where函数.
您可以使用下划线为项目添加
$ npm install --save underscore
Run Code Online (Sandbox Code Playgroud)
或者lodash
$ npm install --save lodash
Run Code Online (Sandbox Code Playgroud)
如果您只关心这个where功能,lodash会将其作为一个单独的模块提供
// only install lodash.where
$ npm install --save lodash.where
Run Code Online (Sandbox Code Playgroud)
在项目中使用它
var where = require("lodash.where");
// ...
var filtered = where(users, {"user": "a"});
Run Code Online (Sandbox Code Playgroud)
即使您使用库来执行此操作,更好的方法可能是设置一系列流,以处理较小模块中的所有数据处理.
在不知道你真正想做什么的情况下,我已经创建了这个例子.出于此代码的目的,可能会考虑调试日志流或其他内容.
JSON-parser.js
input:string(JSON)
输出:object
var Transform = require("stream").Transform;
function JsonParser() {
Transform.call(this, {objectMode: true});
this._transform = function _transform(json, enc, done) {
try {
this.push(JSON.parse(json));
}
catch (e) {
return done(e);
}
done();
}
}
JsonParser.prototype = Object.create(Transform.prototype, {
constructor: {
value: JsonParser
}
});
module.exports = JsonParser;
Run Code Online (Sandbox Code Playgroud)
OBJ-filter.js
输入:对象
输出:对象(结果where(data, filters))
var Transform = require("stream").Transform;
var where = require("lodash.where");
function ObjFilter(filters) {
Transform.call(this, {objectMode: true});
this._transform = function _transform(obj, enc, done) {
this.push(where(obj, filters));
done();
}
}
ObjFilter.prototype = Object.create(Transform.prototype, {
constructor: {
value: ObjFilter
}
});
module.exports = ObjFilter;
Run Code Online (Sandbox Code Playgroud)
stringifier.js
输入:对象
输出:字符串(JSON)
var Transform = require("stream").Transform;
function Stringifier() {
Transform.call(this, {objectMode: true});
this._transform = function _transform(obj, enc, done) {
this.push(JSON.stringify(obj));
done();
}
}
Stringifier.prototype = Object.create(Transform.prototype, {
constructor: {
value: Stringifier
}
});
module.exports = Stringifier;
Run Code Online (Sandbox Code Playgroud)
app.js
// modules
var JsonParser = require("json-parser");
var ObjFilter = require("obj-filter");
var Stringifier = require("stringifier");
// run
var parser = new JsonParser();
// setup stream chain
parser.pipe(new ObjFilter({"user": "a"}))
.pipe(new Stringifier())
.pipe(process.stdout);
// send example json in
parser.write('[{"user": "a", "age": 20}, {"user": "b", "age": 30}, {"user": "c", "age": 40}]');
// output
// => [{"user":"a","age":20}]
Run Code Online (Sandbox Code Playgroud)
在这里,我创建了一个Stringifier将对象转换回JSON 的流,以便我们可以看到它们被转储到控制台中,尽管您可以轻松创建处理应用程序所需操作所需的任何流.您的流端点可能不会以写入控制台的方式结束.
最后一点,您可能会创建一个接受某种查询选项并发出json的数据库流.您可以将该流直接传输到parser.
无论如何,我希望这能让你更好地了解如何在node.js中处理数据.
| 归档时间: |
|
| 查看次数: |
30360 次 |
| 最近记录: |