Nodejs:从文件读取时清理json(比如注释)的任何库?

时间:2012-08-02 19:38:53

标签: json node.js

我正在使用require("fs")在Node.js中读取json文件。

类似的东西:

var readJsonFromFile= function(fileLocation, callback){
      fs.readFile(fileLocation, 'utf8', function (err, data) {
          if (err) {
            return callback(err);
          }

          data = JSON.parse(data);
          callback(null,data);
    });
}

但是,我注意到JSON.parse

  • 不允许发表评论// bla/* blaa */
  • 需要引用键。

虽然我意识到这在技术上是正确的,但是我想知道是否存在任何小型库来清理我经常注释的json文件以保证上述内容。 (不,它不是完全琐碎的DIY,认为//是有效价值的一部分,等等。)

由于

3 个答案:

答案 0 :(得分:4)

是的!我为此目的使用Kyle Simpson的JSON.minify:

https://github.com/getify/JSON.minify

它不是一个完整的Node模块,但它可以很好地加载类似JSON的配置文件等。请注意,您仍然需要引用您的密钥,但它允许发表评论。

var config = JSON.parse(JSON.minify(fs.readFileSync(configFileName, 'utf8')));

答案 1 :(得分:2)

HJSON符合所有这些要求。

  • 这是一个NPM包
  • 它可以处理//条评论
  • 它可以处理/* */条评论
  • 它可以处理不带引号的密钥。

You can try it online

示例文字:

{
  # specify rate in requests/second (because comments are helpful!)
  rate: 1000

  // prefer c-style comments?
  /* feeling old fashioned? */

  # did you notice that rate doesn't need quotes?
  hey: look ma, no quotes for strings either!

  # best of all
  notice: []
  anything: ?

  # yes, commas are optional!
}

答案 2 :(得分:-1)

只需使用JS-YAML来解析您的JSON文件。 YAML是JSON的超集,支持您想要的功能。

如果您不想,您不需要在配置文件中实际使用任何特定于YAML的内容;只需使用YAML解析器作为JSON解析器,修复3个烦人的问题(评论,引用和尾随逗号)。

它甚至带有一个命令行工具,可以将YAML转换为普通的JSON:

~> echo "{ foo: 10, bar: [20, 30], }" | js-yaml -j /dev/stdin
{
  "foo": 10,
  "bar": [
    20,
    30
  ]
}