3

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

就像是:

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,认为//是有效值的一部分,等等。)

谢谢

4

3 回答 3

4

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

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

它不是一个成熟的 Node 模块,但它非常适合加载类似 JSON 的配置文件等。请注意,您仍然必须引用您的密钥,但它确实允许评论。

var config = JSON.parse(JSON.minify(fs.readFileSync(configFileName, 'utf8')));
于 2012-08-02T19:43:24.050 回答
2

HJSON满足所有这些要求。

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

你可以在网上试试

示例文本:

{
  # 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!
}
于 2015-11-16T12:29:45.350 回答
-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
  ]
}
于 2013-01-29T07:24:02.933 回答