3
2

JSONからパターンマッチで欲しい情報をサクッと取り出す

Last updated at Posted at 2024-09-27

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)
3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2