Bash で JSON を解析する
Aashish Sunuwar
2023年1月30日
-
Bash で
jq
(軽量で柔軟なコマンドライン JSON 処理ツール)を使用して JSON を解析する -
Bash で
grep
を使用して JSON を解析する -
python3
を使用して 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"