Todd, The core is very unfriendly to this sort of output and is very much line-oriented. Instead, it might be better for a separate library to parse the Vagrant machine readable output and turn it into JSON.
Best, Mitchell On Fri, Mar 21, 2014 at 1:59 PM, Todd DeLuca <[email protected]> wrote: > 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. -- 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.
