Bash で JSON を解析する

Aashish Sunuwar 2023年1月30日
  1. Bash で jq(軽量で柔軟なコマンドライン JSON 処理ツール)を使用して JSON を解析する
  2. Bash で grep を使用して JSON を解析する
  3. python3 を使用して JSON を解析する
Bash で JSON を解析する

さまざまな手法を使用して、bash で JSON データを解析する方法を学習します。

例では、偽の JSON サーバーを使用します。

偽の JSON サーバー-https://jsonplaceholder.typicode.com/posts

Bash で jq(軽量で柔軟なコマンドライン JSON 処理ツール)を使用して JSON を解析する

jq は、JSON データをより短く、よりシンプルで、簡単な方法で管理するための小さなクロスプラットフォームソリューションです。

jqこちらからダウンロードできます。

jq を使用してよりきれいなフォーマットの JSON データを取得する

jq . コマンドは json データをプリティファイします。

curl "https://jsonplaceholder.typicode.com/posts" | jq .

出力:

[
    {
      "userId": 1,
      "id": 1,
      "title": "delectus aut autem",
      "completed": false
    },
    {
      "userId": 1,
      "id": 2,
      "title": "quis ut nam facilis et officia qui",
      "completed": false
    },
    {
      "userId": 1,
      "id": 3,
      "title": "fugiat veniam minus",
      "completed": false
    }
    ... // remaining list of data
]

JSON から特定のフィールドの値を取得する

jq.[].field_name を使用して、JSON データの配列から特定のフィールドの値を取得できます。

curl "https://jsonplaceholder.typicode.com/posts" | jq '.[].id'

出力:

1
2
3
...

JSON から最初のアイテムのタイトルを取得する

curl "https://jsonplaceholder.typicode.com/posts" | jq '.[0].title'

出力:

"delectus aut autem"

Bash で grep を使用して JSON を解析する

grep コマンドは、JSON データの解析にも使用できます。

JSON ファイルの例:

[
  {
    "id": 1,
    "name": "Andres Gustov",
    "email": "andddy7@gmail.com"
  },
  {
    "id": 2,
    "name": "Anthony Marklov",
    "email": "antman33@gmail.com"
  }
]

スクリプト例:

grep -o '"email": "[^"]*' examplejsonfile.json | grep -o '[^"]*$'

-o オプションを使用して、指定されたパターンに一致する行のみを選択します。次に、パターン'"email": "[^"]*'を指定します。これは、キーemail のすべての値が必要であることを意味します。その後、JSON ファイルを渡してパターンを探します。最後に、別の grep -o コマンドを使用して結果をパイプし、値以外のすべてを削除します。

出力:

andddy7@gmail.com
antman33@gmail.com

python3 を使用して JSON を解析する

Python の json モジュールを使用して JSON 操作を処理することもできます。

curl -s 'https://jsonplaceholder.typicode.com/posts' | \
    python3 -c "import sys, json; print(json.load(sys.stdin))"

特定のフィールド値を取得する

curl "https://jsonplaceholder.typicode.com/posts" | \
    python3 -c "import sys, json; data=json.load(sys.stdin); print([d['id'] for d in data])"

出力:

1
2
3
...

最初のアイテムのタイトルを取得する

curl "https://jsonplaceholder.typicode.com/posts" | \
    python3 -c "import sys, json; print(json.load(sys.stdin)[0]['title'])"

出力:

"delectus aut autem"

関連記事 - Bash Json