如何将 Logstash 配置文件解析为 JSON



我有一个以下格式的 Logstash 配置文件:

input {
    twitter {
        keywords => ["apples","bananas",  "cherries",
                       "lettuce", "tomatoes"]
        follows => ["@sirwebber"]
        ... additional parameters ... 
    }
}
output {
    elasticsearch {
        ... similar types of configuration stuff ...
    }
}

我想将其解析为 Node.js 中的 JSON 对象。所以我正在寻找类似的东西:

{
    "input": {
        "twitter": {
            "keywords": ["apples","bananas","cherries","lettuce","tomatoes"],
            "follows": ["@sirwebber"],
            ... additional parameters ...                 
        }
    },
    "output": {
       ... similar format ... 
    }
}

我的第一次尝试涉及将文件作为字符串读取,然后解析换行符(在拆分我对输入还是输出感兴趣之后)。然后我在"=>"上拆分,我能够创建一个具有所需键和值的 JavaScript 对象。

只要我的值不跨越多行,此方法就有效。但是,我想确保解析器在一般情况下工作(可以包括数组中项目之间的空格)。

你对我应该怎么做有什么建议吗?我需要编写自己的解析器吗?如果是这样,我应该参考关于如何编写这样的解析器的好资源吗?

我会根据空格对字符串进行标记化,然后运行标记:

var str = "input {n
         twitter {n
           keywords => ["apples","bananas","cherries"]n
           follows => ["@sirwebber"]n
         }n
       }n
       n
       output {n
           elasticsearch {n
               something =>n
                  ["hello"]n
           }n
       }";
var tokens = str.split(/s+/);
var js = "{"; 
var prev = '';
for (var i = 0; i < tokens.length; i++) {
    var next = i+1 < tokens.length ? tokens[i+1] : '';
    switch(tokens[i]) {
        case '{':
            js += ":{";
            break;
        case '=>': 
            js += ":";
            break;
        default:
            if (next == "{" || next == '=>') { js += '"'; }
            js += tokens[i] + (((prev == '=>' || prev=='}') && (next != '}' && next != '' && next != '{') )? ',' : '');
            if (next == "{" || next == '=>') { js += '"'; }
            break;
    }
    prev = tokens[i];
}
js += '}';
JSON.parse(js);

相关内容

  • 没有找到相关文章

最新更新