Project

gorgeous

0.02
No commit activity in last 3 years
No release in over 3 years
Convert between different data formats; prettify JSON, HTML and XML
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

 Project Readme

Filthy → gorgeous

Convert between formats.

Usage:

gorgeous [-i] [-F <in-format>] [-T <out-format>] [-q <query>] [-o <destination>] FILE ...

This utility converts data between different formats.
Formats are one of: json, xml, yaml, ruby, email, url

Input can be read from STDIN as well as files given on the command-line.

Options:

-i    Convert file in-place
-F    Input format
-T    Output format
-q    Query selector in format similar to XPath (see below)
-o    Write output to file instead of STDOUT

Query format:

"/items/comments[1]/text"    --  2nd comment body of each item
"/items[-1]/user/full_name"  --  name of user for last item
"//user/username"            --  usernames of all users anywhere in the document

Prerequisites

It's recommended that you install all of these ruby libraries. They are only loaded when processing specific formats.

  • nokogiri for HTML/XML
  • yajl-ruby or json for JSON (for Ruby < 1.9)
  • activesupport (for various stuff)
  • rack for url
  • mail for email

All together now:

$ gem install nokogiri yajl-ruby activesupport rack mail

Examples

Pipe in standard input:

# auto-detects input as being JSON, displays prettified output:
$ curl -s api.twitter.com/1/statuses/show/40453487309361153.json | gorgeous

# covert from JSON to YAML
$ curl -s <url> | gorgeous -T yaml

# extract Twitter avatar from tweet as text
$ curl -s <url> | gorgeous -T txt -q /user/profile_image_url

Prettify a file in place:

# auto-detects format by extension, prettifies and overwrites the file:
$ gorgeous -i some-data.json

# convert some data to YAML
$ gorgeous -i -F json -T yaml some-data

Prettify some HTML (gorgeous calls it "xml"):

$ curl -s www.1112.net/lastpage.html | gorgeous -F xml

Prettify content in clipboard (on a Mac):

$ pbpaste | gorgeous | pbcopy

# convert from YAML to ruby format and copy to clipboard
$ gorgeous fixture.yml -T ruby | pbcopy

Parse query strings and URL-encoded POST payloads:

$ echo 'sourceid=chrome&ie=UTF-8&q=filthy+gorgeous' | gorgeous -T yaml
--- 
sourceid: chrome
q: filthy gorgeous
ie: UTF-8

Parse emails:

# extract prettified HTML part of the email:
$ cat email.raw | gorgeous -F email -T xml

# extract decoded text part of the email:
$ cat email.raw | gorgeous -F email -T txt

# get email headers as JSON:
$ cat email.raw | gorgeous -F email -T json

# get only the email subject:
$ cat email.raw | gorgeous -F email -T txt -q /subject