JSON の読み書き
JSON.parse と generate です。
「JSON の読み書き」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。
JSON とは
JSON(JavaScript Object Notation)は、データ交換用の軽量なテキスト形式です。Ruby のハッシュや配列にそのまま対応付けられます。
使用するには json ライブラリを require します。
require 'json'
data = { name: 'Ruby', year: 1995 }
puts(JSON.generate(data))JSON テキストの解析
JSON.parse は JSON 文字列を Ruby オブジェクトに変換します。オブジェクトは Hash に、配列は Array になります。
require 'json'
text = '{"name":"Ruby","year":1995}'
h = JSON.parse(text)
puts(h['name'])
puts(h['year'])JSON テキストの生成
JSON.generate(またはオブジェクトに対する to_json)は、Ruby のデータをコンパクトな JSON 文字列に変換します。
require 'json'
arr = [1, 2, { ok: true }]
puts(arr.to_json)整形出力
JSON.pretty_generate は、人が読みやすいインデント付きの JSON を生成します。設定ファイルやデバッグに適しています。
require 'json'
data = { name: 'Ruby', tags: ['fun', 'oop'] }
puts(JSON.pretty_generate(data))解析時のシンボルキー
デフォルトでは、解析されたキーは String です。symbolize_names: true を渡すと、代わりに Symbol のキーを取得できます。
require 'json'
h = JSON.parse('{"name":"Ruby"}', symbolize_names: true)
puts(h[:name])入れ子構造
JSON は入れ子構造をサポートします。解析すると、Hash と Array から成るツリー全体が再構築されます。
require 'json'
text = '{"user":{"name":"Ada","roles":["admin","dev"]}}'
h = JSON.parse(text)
puts(h['user']['name'])
puts(h['user']['roles'][1])型の対応付け
JSON の型は Ruby では次のように対応します。
- object → Hash、array → Array
- string → String、number → Integer/Float
- true/false → true/false、null → nil
require 'json'
h = JSON.parse('{"a":1,"b":1.5,"c":null,"d":true}')
puts(h['a'].class)
puts(h['c'].inspect)JSON のファイルへの書き込み
pretty_generate と File.write を組み合わせると、データをディスクに保存できます。
require 'json'
require 'tmpdir'
path = File.join(Dir.tmpdir, 'data.json')
File.write(path, JSON.pretty_generate({ ok: true }))
puts(File.read(path))ファイルからの JSON の読み込み
ファイルの内容を読み込み、1 つの手順で解析します。
require 'json'
require 'tmpdir'
path = File.join(Dir.tmpdir, 'cfg.json')
File.write(path, '{"port":8081}')
cfg = JSON.parse(File.read(path))
puts(cfg['port'])解析エラーの処理
不正な JSON を解析すると JSON::ParserError が発生します。これを rescue して、不正な入力を適切に処理します。
require 'json'
begin
JSON.parse('{not valid}')
rescue JSON::ParserError => e
puts 'Invalid JSON caught'
endラウンドトリップ
生成してから解析すると、同等のデータが返されるはずです。これは便利な簡易チェックになります。
require 'json'
original = { id: 7, tags: ['a', 'b'] }
back = JSON.parse(original.to_json, symbolize_names: true)
puts(back == original)クイックチェック
JSON.parse が String のキーではなく Symbol のキーを返すようにするオプションはどれですか。
まとめ: JSON の読み書き
JSON との間でデータを変換できるようになりました。
JSON.parseで文字列を Ruby オブジェクトに変換しますto_json/JSON.generateでコンパクトな JSON に変換しますpretty_generateで読みやすい出力を生成しますsymbolize_names: trueで Symbol のキーを使用します- 不正な入力では
JSON::ParserErrorを rescue します
require 'json'
puts(JSON.parse('[1,2,3]').sum)よくある質問
「JSON の読み書き」レッスンは無料ですか?
はい。「JSON の読み書き」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。
「JSON の読み書き」で何を学びますか?
JSON.parse と generate です。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ruby Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「JSON の読み書き」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRuby Academyレッスンでコードを書いて実行できますか?
はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。