#json #convert-json #yaml #json-format #json-xml #xml-data #yaml-parser

bin+lib convert2json

CLI utilities to convert CSV, INI, RSV, TOML, XML & YAML into JSON and for use with jaq or jq

44 releases (9 stable)

new 1.1.0 Nov 2, 2024
1.0.5 Sep 21, 2024
0.9.3 Aug 3, 2024
0.9.2 Jul 16, 2024
0.4.4 Jul 31, 2023

#410 in Encoding

Download history 31/week @ 2024-07-18 77/week @ 2024-07-25 201/week @ 2024-08-01 134/week @ 2024-08-08 179/week @ 2024-08-15 8/week @ 2024-08-22 132/week @ 2024-08-29 171/week @ 2024-09-05 24/week @ 2024-09-12 187/week @ 2024-09-19 18/week @ 2024-09-26 33/week @ 2024-10-03 9/week @ 2024-10-10 142/week @ 2024-10-17 120/week @ 2024-10-24 134/week @ 2024-10-31

411 downloads per month

MIT license

37KB
596 lines

convert2json

Utilities for use on the command line, to convert CSV, INI, RSV, TOML, XML & YAML to JSON. For each supported format there is a tool for use in a pipe as well as a wrapper which passes the converted input or files in the arguments to jaq or jq, for further querying and processing.

Overview

Goals:

  • provide light-weight converters to JSON
  • provide jaq and jq wrappers
  • add support for additional formats having maintained Serde implementations

Non-Goals:

  • converting JSON into other data formats, consider jyt
  • replicating jq, jaq or jq must be installed to use the jq wrappers

Usage examples

# convert yaml to json
$ echo foo: bar | yaml2json
{"foo":"bar"}

# query a value from a toml file
$ tq -r .package.description Cargo.toml
CLI utilities to convert CSV, INI, RSV, TOML, XML & YAML into JSON and for use with jaq or jq.

# query for environment variables that contain the current users username, using ini parser
$ printenv | iq --compact-output '.USER as $user | with_entries(select(.value | contains($user))) | keys'
["HOME","LOGNAME","OLDPWD","PWD","USER","USERNAME"]

# csv2json & cq recognize 4 additional arguments
$ csv2json --help
Usage: csv2json [-d <delimiter>] [-q <quote>] [-E <escape>] [--no-trim] [files...]

Reads CSV from files or standard input and converts this to JSON, emitted on standard output. Any errors are reported to standard error and result in a non-zero exit code.

Options:
  -d, --delimiter   field delimiter to use when parsing CSV, defaults to: ,
                    (comma)
  -q, --quote       quote character to use when parsing CSV, defaults to: "
                    (double quote)
  -E, --escape      escape character to use when parsing CSV, to escape quote
                    characters within a field. By default, quotes get escaped by
                    doubling them.
  --no-trim         do not trim headers & fields. By default, both get trimmed
                    of starting or trailing whitespace characters.
  -h, --help        display usage information

Alternatives

Installation

Packages are provided (statically linked) for Debian & Ubuntu, as wells as RPM based Linux distributions and for Alpine Linux.

For Ubuntu, MacOS (universal binaries for x86_64 & arm64) and Windows, archives with pre-built (dynamically linked) binaries are provided, for manual installation.

You can find these packages and archives in the releases.

If you have Rust and Cargo installed, you can build and update these tools using cargo install convert2json. See the feature matrix below, if you only need a subset of the utilities.

Feature Matrix

You may not want to install all of the utilities or only a particular one. Each utility can be selected by itself or via group features. If no features are selected, all utilities get installed.

Matrix of all selectable features:

to_json jq
csv csv2json cq
ini ini2json iq
rsv rsv2json rq
toml toml2json tq
xml xml2json xq
yaml yaml2json yq

Examples:

# install only yq & tq:
cargo install convert2json --no-default-features --features yq,tq
# install all the xml related tools:
cargo install convert2json --no-default-features --features xml

Dependencies

~1.8–3.5MB
~56K SLoC