Parsing nodejs是否有(JSON或XML)流解析器?
是否有一个NodeJ解析器可以连接到一个JSON(或XML)分块数据流,并将发出类似于内置JSON解析器的事件 例如,我将要解析的流来自对后端服务器的HTTP请求。传入的JSON不能采用特殊格式。瞧,这个解决方案对我不起作用Parsing nodejs是否有(JSON或XML)流解析器?,parsing,node.js,Parsing,Node.js,是否有一个NodeJ解析器可以连接到一个JSON(或XML)分块数据流,并将发出类似于内置JSON解析器的事件 例如,我将要解析的流来自对后端服务器的HTTP请求。传入的JSON不能采用特殊格式。瞧,这个解决方案对我不起作用 Jan我不知道我是否理解你的问题,但我以前使用过流式数据块。确实有一些事件被触发了。最近似乎更为活跃,但我无法对该项目发表评论 我无法对等效的JSON解析器进行注释。对于JSON,您可以使用以下代码段 咖啡脚本 make_parser = (callback)->
Jan我不知道我是否理解你的问题,但我以前使用过流式数据块。确实有一些事件被触发了。最近似乎更为活跃,但我无法对该项目发表评论
我无法对等效的JSON解析器进行注释。对于JSON,您可以使用以下代码段 咖啡脚本
make_parser = (callback)->
state_parse=0
level=0
buffer=0
parse_out = (data)->
m = data.match /[{}"]/
if m?
c = m[0]
buffer += data[..m.index]
remaining = data[m.index+1..]
if c == "}"
level -= 1
if level == 0
callback JSON.parse(buffer)
init_state()
else if c == "{"
level += 1
else if c == '"'
state_parse = parse_string
state_parse remaining
else
buffer += data
parse_string = (data)->
m = data.match /["\\]/
if m?
c = m[0]
buffer += data[..m.index]
remaining = data[m.index+1..]
transition =
'\\': parse_special
'\"': parse_out
state_parse = transition[c]
state_parse remaining
else
buffer += data
parse_special = (data)->
if data.length > 0
buffer += data[0]
state_parse = parse_string
state_parse data[1..]
init_state =->
state_parse = parse_out
level = 0
buffer = ""
init_state()
(data)->
state_parse data
fs = require "fs"
s = fs.createReadStream "somefile.json"
s.setEncoding 'utf8'
s.on "data", make_parser (d)->
console.log "-----"
console.log d
javascript:
var fs,make_解析器,s
make_parser = function(callback) {
var buffer, init_state, level, parse_out, parse_special, parse_string, state_parse;
state_parse = 0;
level = 0;
buffer = 0;
parse_out = function(data) {
var c, m, remaining;
m = data.match(/[{}"]/);
if (m != null) {
c = m[0];
buffer += data.slice(0, m.index + 1 || 9e9);
remaining = data.slice(m.index + 1);
if (c === "}") {
level -= 1;
if (level === 0) {
callback(JSON.parse(buffer));
init_state();
}
} else if (c === "{") {
level += 1;
} else if (c === '"') {
state_parse = parse_string;
}
return state_parse(remaining);
} else {
return buffer += data;
}
};
parse_string = function(data) {
var c, m, remaining, transition;
m = data.match(/["\\]/);
if (m != null) {
c = m[0];
buffer += data.slice(0, m.index + 1 || 9e9);
remaining = data.slice(m.index + 1);
transition = {
'\\': parse_special,
'\"': parse_out
};
state_parse = transition[c];
return state_parse(remaining);
} else {
return buffer += data;
}
};
parse_special = function(data) {
if (data.length > 0) {
buffer += data[0];
state_parse = parse_string;
return state_parse(data.slice(1));
}
};
init_state = function() {
state_parse = parse_out;
level = 0;
return buffer = "";
};
init_state();
return function(data) {
return state_parse(data);
};
};
fs = require("fs");
s = fs.createReadStream("somefile.json");
s.setEncoding('utf8');
s.on("data", make_parser(function(d) {
console.log("-----");
return console.log(d);
}));
- 可能是关于xml的答案 流媒体需求
- 可能是关于您的json的答案 流媒体需求