webから取得したjsonレスポンスの差分を比較する方法

技術
スポンサーリンク
スポンサーリンク

はじめに

こんにちは!さいけです。

今回は、「webから取得したjsonレスポンスの差分を比較する方法」について紹介します。

webから取得したjsonレスポンスの差分を比較する方法

webから取得したjsonレスポンスの差分を比較するには、bash・zshのProcess Substitution(プロセス置換)という機能を使います。

プロセス置換機能とは、コマンドの入力または出力をファイルとして扱えるようになるものです。

プロセス置換の記述方法は、以下の記事が参考になります。

bashのプロセス置換(Process Substitution)で中間ファイルを不要に - grep Tips *
はじめに bashのプロセス置換は、引数でファイルを指定すべきところをコマンドの結果で代用できる機能。コマンドの結果をファイルとして扱え、作業

また、上記を踏まえたサンプルコマンドは以下になります。

※下記コマンドを実行する際は、あらかじめjqライブラリを`brew install jq`等でインストールしておいてください。

$ diff <(curl -s <比較したい対象のurl1> | jq ) <(curl -s <比較したい対象のurl2> | jq)

実際に比較してみる(デモンストレーション)

前提

各パスで以下のjsonレスポンスが返却されるようになっています。

/peron1と/person3は同じ返却値。/person2のみhobbyの値が異なります。

/person1と/person3

{
  "name": "taro",
  "age": 22,
  "hobby": "Table Tennis"
}

/person2

{
  "name": "taro",
  "age": 22,
  "hobby": "Tennis"
}

比較する

/peron1とperson2を比較

3c3と表示された。3行目に差分があると教えてくれる。

$ diff <(curl -s "localhost:8080/person1" | jq ) <(curl -s "localhost:8080/person2" | jq)

3c3 <     "hobby": "Table Tennis", --->     "hobby": "Tennis",

/peron1とperson3を比較

差分がないので、何もなし。

$ diff <(curl -s "localhost:8080/person1" | jq ) <(curl -s "localhost:8080/person3" | jq )

差分の比較ができました👍🎉

おわりに

今回は、「webから取得したjsonレスポンスの差分を比較する方法」の紹介をしました。

個人的に、開発をしていてレスポンスがデグレしていないかをサクッと確認するときに使えそうだなと思いました\(^o^)/

コメント