我正在尝试干净地处理JSON对象,但是JSON被分配给这样的变量:
var test = { "foo" : "bar" };
我可以使用这样的文件结构:
{ "foo" : "bar" }
像这样抓住JSON:
var jsonfile = grunt.file.readJSON(source)
但我需要自动执行此操作并保留当前的文件结构。
答案 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;
}