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