Parsing nodejs是否有(JSON或XML)流解析器?

Parsing nodejs是否有(JSON或XML)流解析器?,parsing,node.js,Parsing,Node.js,是否有一个NodeJ解析器可以连接到一个JSON(或XML)分块数据流,并将发出类似于内置JSON解析器的事件 例如,我将要解析的流来自对后端服务器的HTTP请求。传入的JSON不能采用特殊格式。瞧,这个解决方案对我不起作用 Jan我不知道我是否理解你的问题,但我以前使用过流式数据块。确实有一些事件被触发了。最近似乎更为活跃,但我无法对该项目发表评论 我无法对等效的JSON解析器进行注释。对于JSON,您可以使用以下代码段 咖啡脚本 make_parser = (callback)->

是否有一个NodeJ解析器可以连接到一个JSON(或XML)分块数据流,并将发出类似于内置JSON解析器的事件

例如,我将要解析的流来自对后端服务器的HTTP请求。传入的JSON不能采用特殊格式。瞧,这个解决方案对我不起作用


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的答案 流媒体需求

只是一个评论,因为我没有任何具体的答案,但是有几个XML拉式解析器使用各种方法来解析流数据,一些谷歌搜索“JSON拉式解析器”和类似的搜索返回了一些有希望的结果——尽管大部分是Java和基于C的语言。以流式方式解析JSON。谢谢,我正在寻找的节点xml就是一块接一块地传递parseString方法。