Voici un petit script Python qui me permet d'afficher à l'écran n'importe quel contenu JSON correctement indenté (afin de faciliter la lisibilité).
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import json, sys
from pprint import pprint
if not sys.stdin.isatty():
JSON = json.loads(sys.stdin.read())
pprint(JSON)
else:
print("Use this script with a pipe command.")
print("")
print("echo '...' | python3 prettyJson.py")
print("or")
print("cat ... | python3 prettyJson.py")
Par exemple, avec un flux JSON non formaté:
# cat flux.json
{"time": "2016-06-29 15:54","countryName": "Austria","sunset": "2016-06-29 21:18","rawOffset": 1,"dstOffset": 2,"countryCode": "AT","gmtOffset": 1,"lng": 10.2,"sunrise": "2016-06-29 05:27","timezoneId": "Europe/Vienna","lat": 47.01}
Une fois traité par le script:
# cat flux.json | python3 prettyJson.py
{'countryCode': 'AT',
'countryName': 'Austria',
'dstOffset': 2,
'gmtOffset': 1,
'lat': 47.01,
'lng': 10.2,
'rawOffset': 1,
'sunrise': '2016-06-29 05:27',
'sunset': '2016-06-29 21:18',
'time': '2016-06-29 15:54',
'timezoneId': 'Europe/Vienna'}
Fonctionne également avec la commande CURL:
# curl "http://api.geonames.org/citiesJSON?formatted=true&north=44.1&south=-9.9&east=-22.4&west=55.2&lang=de&username=demo&style=full" -o - -s | python3 prettyJson.py
{'geonames': [{'countrycode': 'MX',
'fcl': 'P',
'fclName': 'city, village,...',
'fcode': 'PPLC',
'fcodeName': 'capital of a political entity',
'geonameId': 3530597,
'lat': 19.428472427036,
'lng': -99.12766456604,
'name': 'Mexiko-Stadt',
'population': 12294193,
'toponymName': 'Mexico City',
'wikipedia': 'en.wikipedia.org/wiki/Mexico_City'},
{'countrycode': 'CN',
'fcl': 'P',
'fclName': 'city, village,...',
'fcode': 'PPLC',
'fcodeName': 'capital of a political entity',
'geonameId': 1816670,
'lat': 39.9074977414405,
'lng': 116.397228240967,
'name': 'Peking',
'population': 11716620,
'toponymName': 'Beijing',
'wikipedia': 'en.wikipedia.org/wiki/Beijing'}]}