FormatArcかんたんデータ変換
curlJSON整形

curlのJSONレスポンスを見やすく整形する方法

curlで取得したJSONレスポンスをjq・Python・formatarc CLIで整形する方法を解説。コマンド一行で読みやすいJSONに変換できます。

FormatArc JSON Formatter の実行結果

curl のレスポンスが読みにくい理由

API の動作確認で curl を使うと、レスポンスの JSON がこのように返ってきます。

curl -s https://api.example.com/users/1
{"id":1,"name":"Tanaka","email":"tanaka@example.com","address":{"city":"Tokyo","zip":"100-0001"},"roles":["admin","editor"]}

改行もインデントもないため、ネストが深くなるほど構造の把握が難しくなります。ここからは、この出力を見やすく整形する方法を紹介します。

jq で整形する

JSON の整形ツールとしては jq が最も広く使われています。

jq のインストール

# macOS
brew install jq

# Ubuntu / Debian
sudo apt install jq

# Windows (Chocolatey)
choco install jq

基本的な使い方

curl の出力をパイプで jq に渡すだけです。

curl -s https://api.example.com/users/1 | jq .
{
  "id": 1,
  "name": "Tanaka",
  "email": "tanaka@example.com",
  "address": {
    "city": "Tokyo",
    "zip": "100-0001"
  },
  "roles": [
    "admin",
    "editor"
  ]
}

-s オプションで curl のプログレスバーを非表示にしています。

よく使うフィルタ

jq は整形だけでなく、特定のフィールドを抽出するフィルタとしても使えます。

特定のキーを取得する場合はこちらです。

curl -s https://api.example.com/users/1 | jq '.name'
"Tanaka"

ネストされたキーにはドットでアクセスします。

curl -s https://api.example.com/users/1 | jq '.address.city'
"Tokyo"

配列から全要素の特定フィールドを抽出する場合は [] を使います。

curl -s https://api.example.com/users | jq '.[].name'
"Tanaka"
"Suzuki"
"Sato"

条件でフィルタする場合は select を使います。

curl -s https://api.example.com/users | jq '.[] | select(.roles[] == "admin")'

Python の json.tool で整形する

Python がインストール済みの環境なら、追加のツールは不要です。標準ライブラリの json.tool モジュールがそのまま使えます。

curl -s https://api.example.com/users/1 | python3 -m json.tool
{
    "id": 1,
    "name": "Tanaka",
    "email": "tanaka@example.com",
    "address": {
        "city": "Tokyo",
        "zip": "100-0001"
    },
    "roles": [
        "admin",
        "editor"
    ]
}

jq のようなフィルタ機能はありませんが、整形するだけなら十分です。Python 2 の環境では python コマンドに読み替えてください。

formatarc CLI で整形する

インストールと使い方

formatarc は npx で即時実行できます。インストール不要です。

curl -s https://api.example.com/users/1 | npx formatarc json-format
{
  "id": 1,
  "name": "Tanaka",
  "email": "tanaka@example.com",
  "address": {
    "city": "Tokyo",
    "zip": "100-0001"
  },
  "roles": [
    "admin",
    "editor"
  ]
}

頻繁に使うなら、グローバルにインストールしておくと起動が速くなります。

npm install -g formatarc
curl -s https://api.example.com/users/1 | formatarc json-format

YAML / CSV 変換もパイプで使える

formatarc は JSON 整形だけでなく、そのまま YAML や CSV への変換もできます。

curl -s https://api.example.com/users/1 | npx formatarc json-to-yaml
id: 1
name: Tanaka
email: tanaka@example.com
address:
  city: Tokyo
  zip: "100-0001"
roles:
  - admin
  - editor

CLI の詳しい使い方は formatarc CLI の導入ガイド で紹介しています。

ブラウザで整形する

FormatArc JSON Formatter の使い方

コマンドラインを使わない方法もあります。curl の出力をコピーして JSON Formatter に貼り付ければ、ワンクリックで整形できます。

手順はシンプルです。

  1. curl のレスポンスをコピーする
  2. FormatArc JSON Formatter を開く
  3. 左側のテキストエリアに貼り付ける
  4. 「Format」ボタンを押す

整形結果はそのままコピーしたり、YAML / CSV に変換したりできます。

エラーがあった場合

JSON に構文エラーがあると、整形に失敗します。よくある原因と対処法は JSON Parse Error の解決方法 にまとめています。

どの方法を選ぶか

方法 インストール フィルタ機能 おすすめの場面
jq 必要 高機能 日常的に API を扱う開発者
Python json.tool 不要(Python 必須) なし 手軽に整形したいとき
formatarc CLI npx で即実行 なし(変換は可能) JSON 以外の変換も必要なとき
ブラウザ(FormatArc) 不要 なし コマンドラインが苦手な場合

jq を普段使いしつつ、YAML や CSV への変換が必要なときに formatarc CLI を併用するのが効率的です。

関連記事

まとめ

curl で取得した JSON を整形する方法を4つ紹介しました。jq はフィルタ機能も含めて最も高機能ですが、単純な整形なら Python の json.tool でも十分です。YAML や CSV への変換が必要な場合は formatarc CLI が便利です。ブラウザで手軽に試したい場合は FormatArc JSON Formatter をお使いください。

関連ツール

JSON 整形