Note: This is an old post. I now use jq (http://stedolan.github.io/jq/) instead of the
formatjson Node script described below, and I recommend that you do too.
I had some JSON files that were not indented consistently. I edit these files by hand, so I wanted a way to easily reformat them.
My text editor has a reformatting command, but I really hate what it produces, so I decided to make my own JSON reformatting service for OS X that I could use in any application. First, I wrote a Node.js script to do the reformatting:
(Also available as Literate CoffeeScript).
I saved that file as
~/bin/formatjson, and made it executable with
chmod +x ~/bin/formatjson.
Then I used Automator to create a service:
- Launch Automator
- Create a new Automator document of type Service
- Set it to "Service receives selected text in any application", and check the Output replaces selection text box.
- Drag a Run Shell Script action into the workflow, and enter the following command:
- Save the service with the name "Reformat JSON Text".
(Note: In step 4, if your
node executable is not in
/usr/local/bin, then substitute the appropriate directory. Also, if you saved
formatjson to a directory other than
~/bin, substitute the appropriate directory for that.)
Now, whenever I want to reformat some JSON in a text editor, I just select it, right-click, and choose Services > Reformat JSON Text.
And when I want to reformat things from the command line, this works:
formatjson <ugly.json >pretty.json
If you'd rather have a web page that does this, see A Web Page for Reformatting JSON Text.