今さら聞けないJSONとJSONを上手に使うjq活用術

みなさん、こんにちは。

IoTやWeb APIの世界で仕事をしていると、必ずと言っていいほど出てくるのが JSON(ジェイソン) です。でも正直「なんとなく使っているだけで、深く理解していない」という方も多いのではないでしょうか。今回はそんなエンジニアに向けて、JSONとは何か、どこで使うのか、そしてjqを使ってどう便利に扱うか をまとめてみました。

 


 

JSONとは?

 

JSONは JavaScript Object Notation の略で、データをやり取りするためのシンプルなフォーマットです。例えば、センサーの温度データをAPIで送信する場合、こんな形式で表現されます。

{
  "device_id": "sensor01",
  "temperature": 23.4,
  "timestamp": "2025-09-23T10:15:00Z"
}

ポイントは以下の3つです。

  • キーと値のペア でデータを表す
  • 値には 文字列・数値・真偽値・配列・オブジェクト が入る
  • 人間にも読みやすく、機械にも扱いやすい

XMLのようにタグで囲む必要がなく、軽量でシンプルです。そのためIoTの世界では、センサー → ゲートウェイ → クラウドAPI のデータ連携で大活躍しています。

 


 

JSONが使われる場面

 

IoTエンジニアがJSONを触るのは主にこんなときです。

  • APIのリクエストやレスポンス
    • クラウドにデータを送ったり取得したりするときに必ずJSON形式。
  • ログや設定ファイル
    • 最近はYAMLも増えましたが、設定をJSONで持つケースも依然多いです。
  • メッセージングやMQTT
    • トピックに載せるデータもJSONが一般的。

つまり「IoTエンジニアを名乗るなら、JSONを読み書きできないと仕事にならない」くらい重要なのです。

 


 

jqとは?

 

JSONを扱うときに出てくる最強のコマンドラインツールが jq です。

jqのインストール

Windows、Linux、Macのそれぞれの環境で、以下の方法でインストールできます。

Windows(Scoop)

パッケージ管理ツール Scoop を使ってインストールするのが簡単です。PowerShellで以下のコマンドを実行します

scoop install jq

※ Scoopが未導入の場合は、先に公式サイトの手順でインストールしてください。

Windows(手動)

jqの公式サイト から jq-win64.exe をダウンロードします。

ダウンロードしたファイルを任意の場所に配置します(例: C:\tools\jq)。

環境変数PATH に配置したフォルダのパスを追加します。これにより、コマンドプロンプトやPowerShellのどこからでも jq が使えるようになります。

Linux(apt)

sudo apt install jq

Mac(Homebrew)

brew install jq

インストールが完了したら、ターミナルで jq --version と実行してバージョンが表示されればOKです。

jqは「JSON専用のsed/awk/grep」と呼ばれることもあり、以下のことが得意です。

  • JSONをきれいに整形して表示する
  • JSONから欲しい要素だけ抜き出す
  • JSONを加工して別のJSONに変換する

IoTの現場だと「APIレスポンスをそのままターミナルで見やすくしたい」ときや「センサーの値だけ抜き出したい」ときにめちゃくちゃ便利です。

 


 

jqの基本操作

 

整形表示

まずは整形。JSONをパイプで渡すとインデント付きで表示してくれます。

# Windows
type data.json | jq .

# Linux/Mac
cat data.json | jq .

ぐちゃっとしたAPIレスポンスもこれで一気に見やすくなります。

値の抽出

キーを指定すると値だけを取り出せます。

# Windows
type data.json | jq '.temperature'

# Linux/Mac
cat data.json | jq '.temperature'

出力例:

23.4

配列から要素を抜きたい場合はインデックスを使います。

# Windows
type devices.json | jq '.[0].device_id'

# Linux/Mac
cat devices.json | jq '.[0].device_id'

条件で絞り込み

select を使えばフィルタリングも可能。

# Windows
type devices.json | jq '.devices[] | select(.status=="active")'

# Linux/Mac
cat devices.json | jq '.devices[] | select(.status=="active")'

「稼働中のデバイスだけ抜き出す」みたいな使い方です。

 


 

少し高度な活用

 

map でまとめて変換

全デバイスのIDだけをリスト化する場合はこう書きます。

# Windows
jq '.devices | map(.device_id)' devices.json

# Linux/Mac
jq '.devices | map(.device_id)' devices.json

結果は配列として出力されます。

group_by でグルーピング

例えばセンサーの種類ごとにデータをまとめたいとき。

Bash

# Windows
jq '.sensors | group_by(.type)' sensors.json

# Linux/Mac
jq '.sensors | group_by(.type)' sensors.json

データの整理や統計的な処理の前処理に便利です。

reduce で集計

温度データの平均を計算する例。

# Windows
jq '[.temperatures[].value] | add / length' temps.json

# Linux/Mac
jq '[.temperatures[].value] | add / length' temps.json

jqだけで集計までできるので物凄く重宝します。

 


 

つまずきやすいポイント

 

ここからが本題。多くのエンジニアが「なんでうまくいかないの?」と悩む落とし穴を紹介します。

1. ダブルクオート必須問題

JSONは必ず ダブルクオート でキーを囲む必要があります。 シングルクオートを使うと即エラーです。

{ 'key': 'value' }  # NG
{ "key": "value" }  # OK

2. シェルとのクオート競合

jqのクエリもクオートで囲むので、シェルとバッティングしがちです。

jq '.devices[] | select(.status=="active")'  # OK

間違ってシングルとダブルを混ぜると想定外の結果になります。複雑になったら外側をシングル、内側をダブルと覚えておくのがコツです。

3. 配列の展開の違い

jq '.devices'jq '.devices[]' の違いも初心者が混乱するポイント。

  • .devices → 配列そのものを返す
  • .devices[] → 配列の中身を1つずつ展開する

パイプでつないで処理する場合は [] を忘れると意図した結果が得られません。

4. 数値と文字列の違い

APIレスポンスの仕様で数値が文字列になっていることもあります。

{ "temperature": "23.4" }

この場合、jqで数値計算しようとするとエラーになります。.temperature | tonumber として型変換してから扱うのがベストです。

 


 

IoTエンジニアにとってのjq活用シーン

 

  • センサー値の監視
    • APIレスポンスから数値だけ抜き出して watch コマンドで監視。
  • テストデータの加工
    • 生のJSONをフィルタして、シミュレーション用に整形。
  • ログの解析
    • 膨大なログから特定デバイスのエラーだけを抽出。

GUIでゴリゴリやるより、ターミナルで一発コマンドのほうが速くて正確です。

 


 

まとめ

 

IoTの世界で欠かせないデータ形式であるJSONは、その整形・抽出・加工を一気に楽にしてくれる強力なコマンドラインツール、jq と組み合わせて使うことで真価を発揮します。

つまずきやすいクオート問題や配列展開、型の違いに注意すれば、mapselectgroup_byといった高度な機能も使いこなせます。jqは「知らなくても困らないけど、知っていると爆速で仕事が進む」ツールであり、IoTエンジニアの作業効率を飛躍的に向上させてくれます。

ぜひ活用してみてください!

 

本日も最後までお読みいただきありがとうございました。

それでは、よいIoTライフを!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール