json2dsv 1.4 KB

123456789101112131415161718192021222324252627282930313233
  1. #!/usr/bin/env node
  2. var os = require("os"),
  3. rw = require("rw").dash,
  4. path = require("path"),
  5. iconv = require("iconv-lite"),
  6. commander = require("commander"),
  7. dsv = require("../");
  8. var program = path.basename(process.argv[1]),
  9. defaultOutDelimiter = program.slice(-3) === "tsv" ? "\t" : ",";
  10. commander
  11. .version(require("../package.json").version)
  12. .usage("[options] [file]")
  13. .option("-o, --out <file>", "output file name; defaults to “-” for stdout", "-")
  14. .option("-w, --output-delimiter <character>", "output delimiter character", defaultOutDelimiter)
  15. .option("-n, --newline-delimited", "accept newline-delimited JSON")
  16. .option("--input-encoding <encoding>", "input character encoding; defaults to “utf8”", "utf8")
  17. .option("--output-encoding <encoding>", "output character encoding; defaults to “utf8”", "utf8")
  18. .parse(process.argv);
  19. var outFormat = dsv.dsvFormat(commander.outputDelimiter);
  20. rw.readFile(commander.args[0] || "-", function(error, text) {
  21. if (error) throw error;
  22. text = iconv.decode(text, commander.inputEncoding);
  23. rw.writeFile(commander.out, iconv.encode(outFormat.format(commander.newlineDelimited
  24. ? text.trim().split(/\r?\n/g).map(function(line) { return JSON.parse(line); })
  25. : JSON.parse(text)) + os.EOL, commander.outputEncoding), function(error) {
  26. if (error) throw error;
  27. });
  28. });