Webhookのレスポンス(JSON形式)から特定の値だけを取り出したいときにパターンマッチをつかうと便利だったので紹介します。
以下を irb
で直接打ち込みながら動作確認できます
正常系・異常系を書く場合、case-inを使うほうが適切な場面もあります。
決まったレスポンスを扱うときや、取得できなかった場合の適切なエラーハンドリングをおこなう前提で使うようにすること。
シンプルなkey/value
json = {
"id": 1,
"name": "John Doe",
"email": "johndoe@example.com",
"registered_at": "2024-01-15T10:30:00Z"
}
nameとemailだけほしい
json => { name:, email: }
name
=> "John Doe"
email
=> "johndoe@example.com"
配列の先頭の住所を取得する
json = {
"user": {
"name": "Alice Johnson",
"age": 29,
"addresses": [
{
"postal_code": "1234567",
"address": "123 Main St, Springfield"
},
{
"postal_code": "7654321",
"address": "456 Elm St, Shelbyville"
}
]
}
}
=>の例
json => { user: { name:, age:, addresses: [{ postal_code:, address: }, *] } }
name
=> "Alice Johnson"
postal_code
=> 1234567
irbに上記のJSONを与えるとkey名がシンボルに変換されるのですが、実務ではJSON.parseなどをつかってレスポンスを変換するとおもいます。そのときは symbolize_names: true
を忘れずに。
keyをシンボルとしてパースする例
json = JSON.parse(request.body.read, symbolize_names: true)