🔥

Ruby のオブジェクトを整形された複数行の JSON 文字列に変換する

に公開

Ruby のオブジェクトを JSON 形式の文字列に変換する場合には JSON.#dump#to_json が利用できます。

require "json"

user = { id: 1, name: "homu", age: 14 }
puts user.to_json
# => {"id":1,"name":"homu","age":14}

このようにレシーバのオブジェクトを JSON 形式の文字列に変換します。
しかし、 #to_json などは1行の JSON 文字列として変換するので、データ量が多い場合には見づらいケースもあります。

require "json"

response = {
  message: nil,
  results: [
    {
      address1: "東京都",
      address2: "台東区",
      address3: "浅草橋",
      kana1: "トウキョウト",
      kana2: "タイトウク",
      kana3: "アサクサバシ",
      prefcode: "13",
      zipcode: "1110053"
    }
  ],
  status: 200
}

# 横に長いので見づらい
puts response.to_json
# => {"message":null,"results":[{"address1":"東京都","address2":"台東区","address3":"浅草橋","kana1":"トウキョウト","kana2":"タイトウク","kana3":"アサクサバシ","prefcode":"13","zipcode":"1110053"}],"status":200}

このような場合には JSON.#pretty_generate を利用すると複数行に分割して読みやすい形式の JSON 文字列として変換してくれます。

require "json"

response = {
  message: nil,
  results: [
    {
      address1: "東京都",
      address2: "台東区",
      address3: "浅草橋",
      kana1: "トウキョウト",
      kana2: "タイトウク",
      kana3: "アサクサバシ",
      prefcode: "13",
      zipcode: "1110053"
    }
  ],
  status: 200
}

# 人間が読みやすい形に変換してくれる
puts JSON.pretty_generate(response)
# => {
#      "message": null,
#      "results": [
#        {
#          "address1": "東京都",
#          "address2": "台東区",
#          "address3": "浅草橋",
#          "kana1": "トウキョウト",
#          "kana2": "タイトウク",
#          "kana3": "アサクサバシ",
#          "prefcode": "13",
#          "zipcode": "1110053"
#        }
#      ],
#      "status": 200
#    }

JSON 形式でデバッグ出力やログ出力する場合には便利でそうね。

関連

GitHubで編集を提案

Discussion