Hi Mitchell, et al., What do you think about using JSON as a machine readable output?
The current machine readable output format burdens users with parsing a sparsely documented ad hoc format, albeit one that is more structured than the default vagrant output. Without very thorough documentation it is difficult to know if one is parsing the machine readable output correctly. This makes it only slightly better than the default (non-machine readable) sparsely documented ad hoc output, at least for my purposes. (I maintain python-vagrant: https://github.com/todddeluca/python-vagrant). Contrast this with JSON. JSON requires no parsing, assuming you have a JSON parser for your language of choice. It can easily represent complex nested data structures. If a user wants to process the output using command line tools, they can use jq (http://stedolan.github.io/jq/), which is like sed for JSON, according to its docs. Here is an example of machine readable output: $ vagrant box list --machine-readable 1395431215,,box-name,precise32 1395431215,,box-provider,virtualbox 1395431215,,box-version,0 1395431216,,box-name,precise64 1395431216,,box-provider,virtualbox 1395431216,,box-version,0 1395431216,,box-name,python-vagrant-base 1395431216,,box-provider,virtualbox 1395431216,,box-version,0 1395431216,,box-name,trusty64 1395431216,,box-provider,virtualbox 1395431216,,box-version,0 Since the information for one box is spread across multiple lines, the parsing required is more sophisticated than that for a simple CSV table. With no begin and end tags, to parse the data you must intimately understand how each line relates to the others. Here is a hypothetical JSON version of the box output above: $ vagrant box list --json [ { "target": null, "timestamp": 1395431215, "box-name": "precise32", "box-version": "0", "type": "box-list", "box-provider": "virtualbox" }, { "target": null, "timestamp": 1395431216, "box-name": "precise64", "box-version": "0", "type": "box-list", "box-provider": "virtualbox" }, { "target": null, "timestamp": 1395431216, "box-name": "python-vagrant-base", "box-version": "0", "type": "box-list", "box-provider": "virtualbox" }, { "target": null, "timestamp": 1395431216, "box-name": "trusty64", "box-version": "0", "type": "box-list", "box-provider": "virtualbox" } ] And to demonstrate how `jq` can manipulate this data on the command line, here is an example using `jq` to select the "trusty64" box: $ vagrant box list --json | jq '.[] | select(.["box-name"] == "trusty64")' { "box-provider": "virtualbox", "type": "box-list", "box-version": "0", "box-name": "trusty64", "timestamp": 1395431216, "target": null } Is this the right place to make these feature requests? Should I open an issue on GitHub? Regards, Todd -- You received this message because you are subscribed to the Google Groups "Vagrant" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
