| Crates.io | jaesve |
| lib.rs | jaesve |
| version | 1.3.4 |
| created_at | 2019-08-26 17:42:15.8011+00 |
| updated_at | 2020-03-01 22:09:02.967827+00 |
| description | A CLI utility for stream converting JSON objects to a series of CSV values |
| homepage | https://github.com/bazaah/jaesve |
| repository | https://github.com/bazaah/jaesve |
| max_upload_size | |
| id | 159835 |
| size | 204,995 |
A CLI utility written in pure Rust for stream converting JSON objects to a series of CSV values, from stdin and/or file(s) to stdout or a file.
cargo install jaesverustup default stablegit clone https://github.com/bazaah/jaesve.git; cd jaesvecargo run --releasetarget/release/Jaesve comes with a CLI, courtesy of clap.rs. You can type -h or --help to see the available settings, or browse a complete listing below.
-h --help Displays help (use --help for more detailed messages)-V --version Displays version information-a --append Append to output file, instead of overwriting-q --quiet Silences error messages-v Verbosity of debug information
-o --output Set output file to write
stdout-l --line Set stdin to read a JSON doc from each line, and the line to start processing from
0-E --regex Set a regex to filter output-c --column Sets field to match regex on
ident, jptr, type, value, jmes-f --format A dot '.' separated list of fields describing how output is formatted
ident.jptr.type.valueident, jptr, type, value, jmes, all-d --delim Sets delimiter between output fields
,-g --guard Set field quote character
"config Configure various program intrinsics
config --help for the current listcompletions Autocompletion script generator
completions [FILE] -- <SHELL>
FILE is present, defaults to stdoutSHELLs: bash, zsh, fish- representing stdin. If you wish to add flags and options after this Arg, you must end its values with a :.
jaesve --quiet --append -o output.csv input1 input2 - input4 // This is happyjaesve input1 input2 - input4 --quiet --append -o output.csv // This is sadjaesve input1 input2 - input4 : --quiet --append -o output.csv // This is happyA subset of the above flags and options can be set via environment variables or config file(s). Listed below:
debug (-v)quietappendlinedelimguardformatbuf_inbuf_outlinereader_eolfactorThey expect the same input kinds as the CLI variants, with flags (i.e quiet) taking common bool representations -- e.g true, No, 1, etc.
When given a variable from multiple sources the program will prioritize in this order: (highest to lowest)
The program will check for variables with the format JAESVE_<VAR_NAME>.
Config files are disabled by default, if you wish to use them add --features=config-file to your cargo install/build. The expect format is TOML and an example file is listed below:
quiet = false
delim = ","
# Note this corresponds to the 'config' CLI subcommand
[config]
factor = "K"
In preliminary tests it parsed 2G of JSON in 3 minutes.
Jaesve is written to minimize memory usage. It uses a stream based approach to parsing JSON, and attempts to unroll nested objects. Its maximum memory footprint can be described as follows:
sizeof largest object/array +sizeof combined elements NOT including any object/array from doc start to largest object/array +program overheadTLDR: the more deeply nested and larger the objects/arrays, the larger the memory footprint.
For a simple example, let's use the following JSON:
//sample.json
{
"aliceblue": "#f0f8ff",
"antiquewhite": "#faebd7",
"azure": "#f0ffff",
"beige": "#f5f5dc",
"black": "#000000",
"blanchedalmond": "#ffebcd",
"gradient": {
"blues": ["#0000f0", "#0000f1", "#0000f2"],
"green": "#00ff00"
}
}
Running jaesve sample.json prints out
"1","/gradient/blues/0","String","#0000f0"
"1","/gradient/blues/1","String","#0000f1"
"1","/gradient/blues/2","String","#0000f2"
"1","/gradient/green","String","#00ff00"
"1","/gradient/blues","Array",""
"1","/aliceblue","String","#f0f8ff"
"1","/antiquewhite","String","#faebd7"
"1","/azure","String","#f0ffff"
"1","/beige","String","#f5f5dc"
"1","/black","String","#000000"
"1","/blanchedalmond","String","#ffebcd"
"1","/gradient","Object",""
Where:
"INTEGER" is which input source the value came from"/.../..." is the json pointer of that record"JSON TYPE" is the record typeVALUE is the value associated with that record, if it is an endpoint i.e not a Object or ArrayJaesve prints any errors to stderr unless --quiet is set with escalating information on -v, -vv and -vvv.
It will error for the following conditions:
The above errors are expected to be handled by the user, if other errors occur they are considered bugs and I'd appreciate it if you'd open an issue with a description of what went wrong and the error message you received.