Home Programming Top 5 techniques for pretty-printing JSON files

Top 5 techniques for pretty-printing JSON files

This guide covers various tools and techniques suitable for developers, data scientists, and anyone working with JSON data, ensuring that your JSON files are not only functional but also aesthetically pleasing.

by Divya Kiran Kumar
pretty print json

If you’re spending a good chunk of your day staring at JSON files in a Linux environment, you know how jumbled and unreadable they can sometimes be. Let’s dive into the world of pretty-printing JSON in the Linux command line, exploring five effective methods to turn that script into a readable masterpiece.

Understanding JSON and its importance

Before we jump into the solutions, let’s take a moment to appreciate JSON (JavaScript Object Notation). It’s a lightweight data-interchange format, easy for humans to read and write, and for machines to parse and generate. But when it comes to reading raw JSON data in the Linux terminal, it often appears as a long string, which is where pretty-printing comes into play.

Let’s delve into a real-world example to highlight the importance of pretty-printing JSON. For this, I’ll use a sample JSON data representing a user profile in a typical web application.

Before pretty-printing

Imagine you receive a JSON string from a web API or a database query that looks like this:

{"id":123,"name":"John Doe","email":"johndoe@example.com","roles":["admin","editor"],"preferences":{"theme":"dark","notifications":true},"last_login":"2023-07-16T15:45:00"}

In this raw format, the JSON is compact but hard to read, especially if you want to quickly understand the structure or find a specific piece of information. It’s a single line with no spacing or indentation, which is common in data transmission to save bandwidth.

After pretty-printing

Now, let’s apply pretty-printing to this JSON string. Using a tool like jq, the JSON becomes:

{
  "id": 123,
  "name": "John Doe",
  "email": "johndoe@example.com",
  "roles": [
    "admin",
    "editor"
  ],
  "preferences": {
    "theme": "dark",
    "notifications": true
  },
  "last_login": "2023-07-16T15:45:00"
}

The difference

The transformation is quite remarkable:

  1. Readability: The pretty-printed version spreads the data across multiple lines with proper indentation. This makes it significantly easier to read and understand.
  2. Structure visibility: You can clearly see the hierarchical structure of the JSON data. For example, it’s evident that roles and preferences are nested within the main object.
  3. Easier debugging: For developers and system admins, pretty-printing is invaluable for debugging. It’s easier to spot missing commas, mismatched braces, and other common JSON errors.
  4. Data analysis: If you’re scanning through multiple JSON objects, a well-formatted layout helps in quickly analyzing and comparing data.

In practice

In real-world scenarios, such as configuring web servers, analyzing response data from APIs, or managing configuration files, the difference between a single-line and a pretty-printed JSON can mean saving minutes to hours in understanding and troubleshooting. This is why pretty-printing tools are a staple in the developer’s toolkit.

Also, while the raw, compact JSON is ideal for transmission and storage, the pretty-printed format is a boon for human interaction and interpretation. This is a classic example of the intersection between machine efficiency and human usability.

5 ways to pretty-print JSON files

Method 1: Using jq – A command-line JSON processor

What is jq?

jq is a powerful and flexible command-line JSON processor. It’s my personal favorite for its simplicity and versatility.

Installation
Ubuntu/Debian-based distributions

You’ve already seen the installation command for Ubuntu, which also applies to Debian and other Debian-based distributions.

sudo apt-get install jq
Fedora

Fedora and similar distributions like RHEL (Red Hat Enterprise Linux) and CentOS use the dnf package manager.

sudo dnf install jq

For older versions of RHEL/CentOS (version 7 and earlier), you might need to use yum:

sudo yum install jq
Arch Linux

In Arch Linux and Arch-based distributions like Manjaro, jq can be installed using the pacman package manager.

sudo pacman -S jq
openSUSE

For openSUSE, jq can be installed using zypper.

sudo zypper install jq
Gentoo

Gentoo Linux uses the emerge package manager. You can install jq as follows:

sudo emerge dev-util/jq
Alpine Linux

Alpine, often used in Docker containers for its small size, uses apk as its package manager.

sudo apk add jq
Snap (Universal package manager)

If you prefer using Snap, which is a universal package manager available on many distributions, you can install jq as follows:

sudo snap install jq

Usage

Simply pipe the JSON content to jq:

cat file.json | jq

Example output

{
  "name": "FOSSLinux",
  "version": "2.0",
  "features": ["FOSS", "Linux", "Commands"]
}

Method 2: Python’s JSON tool

The simplicity of Python

Python comes with a built-in JSON tool. It’s a great alternative if you don’t want to install additional software.

Usage

Use this one-liner:

cat file.json | python -m json.tool

Example output

{
    "name": "FOSSLinux",
    "version": "2.0",
    "features": [
        "FOSS",
        "Linux",
        "Commands"
    ]
}

Method 3: Node.js

Leveraging Node.js for JSON

Node.js is another excellent tool for handling JSON. If you’re a JavaScript fan like me, you’ll appreciate this method.

Installation

Ensure Node.js is installed:

sudo apt-get install nodejs

Usage

Run this command:

cat file.json | node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, 2))"

Example output

{
  "name": "FOSSLinux",
  "version": "2.0",
  "features": [
    "FOSS",
    "Linux",
    "Commands"
  ]
}

Method 4: Using jq in advanced mode

Going beyond with jq

jq is not just for basic formatting. It can transform JSON in complex ways.

Example

Let’s filter and format:

echo '{"name": "FOSSLinux", "version": "2.0"}' | jq '.name'

Output

"FOSSLinux"

Method 5: Utilizing json_pp – Perl’s JSON pretty printer

The Perl approach

json_pp is a lesser-known tool but quite handy, especially if you’re comfortable with Perl.

Usage

Simply use:

cat file.json | json_pp

Example output

{
   "name" : "FOSSLinux",
   "version" : "2.0",
   "features" : [
      "FOSS",
      "Linux",
      "Commands"
   ]
}

Additional tips and tricks

Integrating with shell scripts

You can easily integrate these methods into your shell scripts for automated JSON formatting. For instance, using jq within a bash script to process JSON files can be a real time-saver.

Handling large files

When dealing with large JSON files, you might want to consider tools like jq or Node.js, as they handle large data sets more efficiently than simple Python scripts.

Online alternatives

While command-line tools are great, sometimes an online JSON formatter can be handy, especially when you’re not at your own workstation. Websites like JSONLint are great for quick formatting.

The human element

I must admit, there’s a satisfaction in transforming a chunk of messy JSON into a beautifully formatted, readable structure. It’s like turning chaos into order. Each time I run a pretty-print command, it feels like a small victory in my day-to-day coding adventures.

Conclusion

Pretty-printing JSON in Linux can significantly improve your data handling and debugging experience. Each method has its charm; jq for its power, Python for its simplicity, Node.js for JavaScript enthusiasts, and json_pp as a Perl alternative. I often oscillate between jq and Python, depending on the task at hand.

You may also like

Leave a Comment

fl_logo_v3_footer

ENHANCE YOUR LINUX EXPERIENCE.



FOSS Linux is a leading resource for Linux enthusiasts and professionals alike. With a focus on providing the best Linux tutorials, open-source apps, news, and reviews written by team of expert authors. FOSS Linux is the go-to source for all things Linux.

Whether you’re a beginner or an experienced user, FOSS Linux has something for everyone.

Follow Us

Subscribe

©2016-2023 FOSS LINUX

A PART OF VIBRANT LEAF MEDIA COMPANY.

ALL RIGHTS RESERVED.

“Linux” is the registered trademark by Linus Torvalds in the U.S. and other countries.