curlでREST APIを実行してレスポンスが返却された際に、データが多いと1行で表示されるので、非常に見にくい。
そんな時には、python -m json.tool
を使うとJSONを整形してくれる。
pythonなし
curl -X GET http://api.thni.net/jzip/X0401/JSON/064/0941.js { "state":"1", "stateName":"北海道", "city":"札幌市中央区", "street":"旭ケ丘" }
pythonあり
curl -s -X GET http://api.thni.net/jzip/X0401/JSON/064/0941.js | python -m json.tool { "state": "1", "stateName": "\u5317\u6d77\u9053", "city": "\u672d\u5e4c\u5e02\u4e2d\u592e\u533a", "street": "\u65ed\u30b1\u4e18" }
日本語がエスケープされる
このままだと日本語が含まれる場合はエスケープされて表示されてしまう。
下記の記事を参考にjson.dumps
を使えばエスケープされずに表示される。
ただし、CentOSだとUnicodeEncodeError: 'ascii' codec can't encode characters in position 15-20: ordinal not in range(128)
のエラーが出ており、うまく表示されない。
原因までは調べていないので、今度調べてみようと思う。
curl -s http://api.thni.net/jzip/X0401/JSON/064/0941.js | python -c 'import sys,json;print json.dumps(json.loads(sys.stdin.read()),indent=4,ensure_ascii=False)' { "city": "札幌市中央区", "state": "1", "stateName": "北海道", "street": "旭ケ丘" }
python3と構文修正で対応できた (2021/1/17 更新)
riceflow (id:yoneyore)さんからのコメントを頂き、値が取得できた。 コメントありがとうございました!
python3とprint関数をカッコ()で括れば正常に動作した。 詳細な原因は分からないが、値は取得できた。
curl -s http://api.thni.net/jzip/X0401/JSON/064/0941.js | python3 -c 'import sys,json;print(json.dumps(json.loads(sys.stdin.read()),indent=4,ensure_ascii=False))' { "state": "1", "stateName": "北海道", "city": "札幌市中央区", "street": "旭ケ丘" }
最後に
REST APIの試験をするとなるとこのような整形が地味に効いてくる。
確認ミスをなくすには整形して見やすい形にすることは重要。