我想将一个JSON对象作为命令行参数传递给node。如下所示:
node file.js --data { "name": "Dave" }
做这件事最好的方法是什么,或者有没有其他更可取的方法来完成同样的事情?
发布于 2015-10-01 06:45:55
如果数据量很小,我会使用https://www.npmjs.com/package/minimist,这是一个用于nodejs的命令行参数解析器。它不是json,但您可以简单地传递如下选项
--name=Foo 或
-n Foo我认为这比json更适合作为命令行工具。
如果要使用大量数据,最好创建一个json文件,并且只将文件名作为命令行参数传递,这样程序就可以加载和解析它。
作为命令行参数的大对象,很可能不是一个好主意。
发布于 2017-06-28 05:54:02
这对我来说很有效:
$ node foo.js --json-array='["zoom"]'然后在我的代码中,我有:
import * as _ from 'lodash';
const parsed = JSON.parse(cliOpts.json_array || []);
_.flattenDeep([parsed]).forEach(item => console.log(item));我使用dashdash,我认为这是命令行解析的最佳选择。
要对对象执行相同的操作,只需使用:
$ node foo.js --json-object='{"bar": true}'发布于 2018-07-10 18:19:01
这可能有点夸大其词,也不适合您正在做的事情,因为它会使JSON不可读,但我找到了一种健壮的方法(就像“在任何OS上工作”一样),那就是使用base64编码。
我想通过JSON在程序的各个部分之间传递许多选项(主节点例程调用一组小的从节点例程)。我的JSON相当大,有像引号和反斜杠这样令人讨厌的字符,所以要清理它听起来很痛苦(特别是在多操作系统环境中)。
最后,我的代码(TypeScript)如下所示:
在调用程序中:
const buffer: Buffer = new Buffer(JSON.stringify(myJson));
const command: string = 'node slave.js --json "' + buffer.toString('base64') + '" --b64';
const slicing: child_process.ChildProcess = child_process.exec(command, ...)在接收程序中:
let inputJson: string;
if (commander.json) {
inputJson = commander.json;
if (commander.b64) {
inputJson = new Buffer(inputJson, 'base64').toString('ascii');
}
}( --b64标志允许我在手动输入普通JSON或使用base64版本之间进行选择,我使用commander只是为了方便)
https://stackoverflow.com/questions/32876669
复制相似问题