Pretty Print JSON en un script de Shell

Abdullah Bukhari 20 junio 2023
Pretty Print JSON en un script de Shell

JSON es un enfoque textual para representar matrices y literales de objetos de JavaScript junto con los datos escalares. Es comparativamente más fácil de leer y escribir y más manejable para que el software analice y genere.

JSON se usa a menudo para serializar datos estructurados e intercambiarlos a través de una red, generalmente entre un servidor y aplicaciones web.

Pretty Print JSON en un script de Shell

Al trabajar con JSON, uno podría desear su salida en un formato más comprensible para los humanos. Considere el objeto JSON a continuación:

{"name": "Ali", "rollno": 123, "fathername": "Muhammad", "mothername": "Qimra", "semester": 5, "roomno": "b-12", }

Comprender los atributos del objeto JSON anterior ya es bastante difícil con ni siquiera una docena de atributos, así que imagina qué tipo de pesadilla sería con cientos de atributos.

Por lo tanto, es importante formatearlo en un formato más amigable para los humanos como el atributo JSON a continuación:

{"name": "Ali",
"rollno": 123,
"fathername": "Muhammad",
"mothername": "Qimra",
"semester": 5,
"roomno": "b-12"}

Observe cuánto más limpio se ve ahora. Ahora veremos una multitud de formas de lograr lo anterior.

Con python 2.6+, puede usar:

echo '{"key1": "val1", "keyn": "valn"}' | python -m json.tool
# or use
echo '{"key1": "val1", "keyn": "valn"}' | python2 -m json.tool
# or use
echo '{"key1": "val1", "keyn": "valn"}' | python3 -m json.tool

La salida será la siguiente:

{
    "key1": "val1",
    "keyn": "valn"
}

Sin embargo, si no ha instalado Python, Python2 o Python3, obtendrá uno de los siguientes errores:

Command 'python' not found
Command 'python2' not found
Command 'python3' not found

Para evitar este error, use el siguiente comando:

sudo apt install python python2 python3

Otra forma de hacerlo, si tiene el objeto JSON almacenado en un archivo JSON, sería ejecutar el siguiente comando:

python -m json.tool <path to json file>.json

Si, por si acaso, el JSON proviene de la fuente de Internet como una API, entonces use:

curl <url> | python -m json.tool

Ahora veremos las otras formas de lograr lo anterior.

Supongamos que tenemos un archivo my_json.json con la estructura:

{ "key1": "val1", " keyn": "valn" }

Tenga en cuenta que usamos (.) para especificar el directorio actual, ya que el archivo reside allí:

sudo jq . my_json.json | less –R

jq '.key1' <<< '{ "key1": "val1", " keyn": "valn" }'

cat my_json.json| jq .

echo '{ "key1": "val1", " keyn": "valn" }' | npx json

Para usar jq, debe instalarlo usando el siguiente comando:

sudo apt install jq

El resultado del primero, tercero (que usa una canalización para transferir datos desde el archivo my_json.json para procesar jq) y cuarto método es el siguiente:

{
    "key1": "val1",
    "keyn": "valn"
}

El cuarto método necesita una dependencia de npx, pero no se preocupe cuando ejecute ese comando. Instalará automáticamente npx si aún no lo tiene.

El segundo método define un objeto JSON e imprime el valor de la clave key1. A continuación se muestra su salida:

"val1"

También podemos combinar json.tool de Python con pigmentize para imprimir bastante el objeto JSON. Considere el siguiente comando:

echo '{ "key1": "val1", " keyn": "valn" }' | python -m json.tool | pygmentize –g

La salida del comando anterior es la siguiente:

{
    "key1": "val1",
    "keyn": "valn"
}

Sin embargo, para usar el comando anterior, debe instalar pigmentize. Para instalar pigmentize, use el siguiente comando:

sudo apt install python3-pygments

Artículo relacionado - Bash Json