如何过滤从npm license-checker包中返回的JSON?

时间:2015-09-17 15:24:12

标签: javascript json

我正在尝试使用license-checker库来过滤和抛弃某些许可证类型。在README中,有一个如何使用一些意外字符查询JSON数据的示例:

var checker = require('license-checker');

checker.init({
    start: '/path/to/start/looking'
}, function(json, err) {
    if (err) {
        //Handle error
    } else {
        //The sorted json data
    }
});

但是,当我查看该JSON的格式时,我不确定如何将其作为评估许可证的一部分。以下是结构示例:

 { 'ansi-styles@1.1.0': 
     { licenses: 'MIT',
       repository: 'https://github.com/sindresorhus/ansi-styles' },
    'ansi-styles@2.1.0': 
     { licenses: 'MIT',
       repository: 'git+https://github.com/chalk/ansi-styles',
       licenseFile: '...' },
    'ansi-wrap@0.1.0': 
     { licenses: 'MIT',
       repository: 'git+https://github.com/jonschlinkert/ansi-wrap',
       licenseFile: '...' },
    ...

如何检查传入checker函数的json变量,以将licenses属性与许可证白名单数组进行比较?

1 个答案:

答案 0 :(得分:1)

对象开头的转义序列\u001b[34m看起来很像ANSI转义序列,用于告诉终端以彩色呈现内容。请参阅此示例:How to print color in console using System.out.println?。因此,当我尝试使用时,您的代码正确地转储了许可证JSON:

var checker = require('license-checker');

checker.init({ start: '.' }, function(json, err) {
    if (err) {
        //Handle error
    } else {
        console.log (JSON.stringify (json))
    }
});

那么你将如何使用生成的JSON?任何对象上的Object.keys将对象中的(必要的)不同键提取到数组中。然后,数组上的简单过滤器表达式将允许您捕获您感兴趣的内容。例如,如果您想保留所有MIT许可软件包,您可以这样做:

var keys = Object.keys (json)
var okPackages = keys.filter (function (e) {
        return json.hasOwnProperty (e) && (json[e].licenses === "MIT")
    });