当文件将对象分配给变量时,grunt如何提取JSON对象

时间:2015-06-16 22:31:14

标签: javascript json gruntjs

我正在尝试干净地处理JSON对象,但是JSON被分配给这样的变量:

var test = { "foo" : "bar" };

我可以使用这样的文件结构:

{ "foo" : "bar" }

像这样抓住JSON:

var jsonfile = grunt.file.readJSON(source)

但我需要自动执行此操作并保留当前的文件结构。

2 个答案:

答案 0 :(得分:0)

问题是我找不到将javascript文件包含到我的grunt任务中的方法。所以我做的是将文件作为文字字符串读取。

然后使用正则表达式我删除了表示变量赋值的字符串部分。最后,我可以将字符串解析为对象

  var test = grunt.file.read(source),
  re = new RegExp('var?.test?.=|;','gi'),
  test = JSON.parse(test.replace(re, ""));

答案 1 :(得分:0)

FelixKing的解决方案实现了:

//somefile.js
var someJSONObject = {
    SOME_KEY: "VALUE";
};

module.exports = someJSONObject;

//Gruntfile.js
var json = require('somefile');
console.log(json.SOME_KEY); //logs "VALUE"

module.exports = function(grunt) {
  //...rest of grunt file
}

比解析" var ="更易于维护(并且更灵活)用RegEx从原始字符串中删除。您不再仅限于JSON,而是任何JavaScript。

只是为了预先解决您有关将JS文件重新用于多种用途的任何问题(因此module可能不会在somefile.js中定义,因为它不在节点环境中),你可以这样做:

    //somefile.js
    var someJSONObject = {
        SOME_KEY: "VALUE";
    };

    //CommonJS export syntax
    //don't do anything if module.exports is not in scope
    if ( typeof module === "object" && typeof module.exports === "object" ) {
        module.exports = someJSONObject;
    }