0Pricing
Ruby Academy · レッスン

JSON API

JSON を返します。

「JSON API」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。

JSON APIが必要な理由

JSONはWeb APIの標準的なデータ形式です。クライアントはHTMLではなく、構造化されたデータを送受信します。

  • 言語に依存しません
  • Rubyのハッシュや配列に自然に対応します
  • 軽量で人間にも読みやすい形式です

Rubyの標準ライブラリでは、json モジュールを使ってJSONを処理します。

require 'json'

data = { name: 'Ada', langs: ['Ruby', 'Python'] }
puts data.to_json

RubyをJSONに変換する

ハッシュまたは配列に対して to_json を呼び出すか、JSON.generate を使用します。

  • シンボルと文字列はJSONのキーになります
  • ネストした構造も再帰的に変換されます
require 'json'

user = { id: 1, active: true, tags: ['admin'] }
puts JSON.generate(user)

JSONを整形して出力する

読みやすい出力には JSON.pretty_generate を使用します。

  • インデントと改行が追加されます
  • デバッグやログに適しています
  • 本番のレスポンスでは、バイト数を節約するために避けてください
require 'json'

config = { server: { host: 'localhost', port: 4567 } }
puts JSON.pretty_generate(config)

JSON入力を解析する

JSON.parse を使って、受け取ったJSON文字列をRubyオブジェクトに変換します。

  • デフォルトではキーは文字列になります
  • symbolize_names: true を渡すとシンボルキーになります
require 'json'

raw = '{"name": "Ada", "age": 30}'
data = JSON.parse(raw)
puts data['name']
puts data['age']

シンボル化されたキー

シンボルキーは便利で、検索もわずかに高速です。

  • symbolize_names: true で有効にします
  • 信頼できない入力によって大量のシンボルが作成されないよう注意してください
require 'json'

raw = '{"city": "Istanbul"}'
data = JSON.parse(raw, symbolize_names: true)
puts data[:city]

SinatraからJSONを返す

Sinatraのルートでは、コンテンツタイプを設定し、JSON文字列を返します。

  • content_type :jsonでヘッダーを設定します
  • 本文としてhash.to_jsonを返します
require 'sinatra'
require 'json'

get '/api/status' do
  content_type :json
  { status: 'ok', time: Time.now.to_i }.to_json
end

JSONリクエスト本文を読み取る

POST APIでは、本文をそのまま読み取り、パースします。

  • request.body.readで生の文字列を取得します
  • JSON.parseでパースします
require 'sinatra'
require 'json'

post '/api/users' do
  payload = JSON.parse(request.body.read)
  content_type :json
  { created: payload['name'] }.to_json
end

APIレスポンス用のハッシュを構築する

シリアライズする前に構造化されたハッシュを構築すると、レスポンスの形式を統一できます。

  • dataキーの下にデータを格納します
  • ステータスとメタデータを含めます
require 'json'

def api_response(data, status: 'ok')
  { status: status, data: data }.to_json
end

puts api_response({ id: 1, name: 'Ada' })

パースエラーを処理する

不正なJSONをパースするとJSON::ParserErrorが発生します。必ずレスキューしてください。

  • クライアントに400 Bad Requestを返します
  • パースエラーでアプリをクラッシュさせないでください
require 'json'

begin
  JSON.parse('{ broken')
rescue JSON::ParserError => e
  puts "Invalid JSON: #{e.message}"
end

オブジェクトの配列をシリアライズする

コレクションは自然にJSON配列としてシリアライズされます。

  • ハッシュの配列はオブジェクトの配列になります
  • mapを使って各レコードの形を整えます
require 'json'

users = [{ id: 1, name: 'Ada' }, { id: 2, name: 'Bob' }]
output = users.map { |u| { name: u[:name] } }
puts output.to_json

オブジェクトに独自のto_jsonを定義する

to_jsonまたはas_jsonを定義すると、クラスにシリアライズ方法を教えられます。

  • 内部状態を単純なハッシュに変換します
  • APIから非公開フィールドを隠します
require 'json'

class User
  def initialize(id, name)
    @id = id
    @name = name
  end

  def to_json(*)
    { id: @id, name: @name }.to_json
  end
end

puts User.new(1, 'Ada').to_json

理解度チェック

JSON APIに関する知識を確認しましょう。

まとめ

JSON APIの構築方法を学びました。

  • 標準ライブラリからrequire 'json'を読み込みます
  • to_json / JSON.generateでRubyをJSONにシリアライズします
  • JSON.parseで受信したJSONをデシリアライズします
  • Sinatraのルートでcontent_type :jsonを設定します
  • 必ずJSON::ParserErrorをレスキューします

次はRackとミドルウェアについて学びます。

よくある質問

「JSON API」レッスンは無料ですか?

はい。「JSON API」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。

「JSON API」で何を学びますか?

JSON を返します。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Ruby Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「JSON API」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このRuby Academyレッスンでコードを書いて実行できますか?

はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Sinatra の基礎
  2. ルートとパラメーター
  3. JSON API
  4. ミドルウェアと Rack
← Ruby Academyに戻る