RubyおよびRuby on RailsでJSON形式のデータをパースするためのチュートリアルの例
2022-01-31 01:14:48
RubyでJSONをパースする
RubyによるJsonのパース例です。
json = '["a", "B", "C"]'
puts "Unsafe #{unsafe_json
(json).inspect}"
#output Unsafe
["a", "B", "C"]
RubyはJsonを解析して、上記のjson文字列をArrayにパースしていますが、このような方法は安全ではありません。
json = 'puts "Danger
Will Robinson"'
puts "Unsafe #{unsafe_json
(json).inspect}"
また何を出力すればいいのでしょうか?残念ながら、何もパースされず、警告が表示されます:warning: character class has `[' without escape safe as follows.
module SafeJSON
require 'monitor'
def SafeJSON.build_safe_json
ret = nil
waiter = ''
waiter.extend(MonitorMixin)
wait_cond = waiter.new_cond
Thread.start do
$SAFE = 4
ret = Proc.new {|json|
eval(json.gsub(/(["'])/s*:/s*
(['"0-9tfn/[{])/){"#{$1}=>#{$2}"}) }
waiter.synchronize do wait_cond.signal
end
end
waiter.synchronize do wait_
cond.wait_while { ret.nil? } end
return ret
end
@@parser = SafeJSON.build_safe_json
# Safely parse the JSON input
def SafeJSON.parse(input)
@@parser.call(input)
rescue SecurityError
return nil
end
end
このModuleを入れると、RubyでJsonをこんな風にパースできるようになります。
peoples=SafeJSON.parse('
{"people":[{"name":"site120","
email":"[email protected]","sex":"male"},
{"name":"site120_2","email":"site1
[email protected]_2","sex":"male_2"}]}')
puts peoples["people"][1]["name"]
#output site120_2
Ruby on Railsの場合
railsはRJSによるAJAXのサポートが組み込まれているので、jsonを使う機会はあまりないかもしれませんが、データ交換のための便利なフォーマットとして、以下のようなものがあります。
ここではJsonプラグインを使用しており、インストールコマンドは
gem install json_pure
使用例です。
require "open-uri"
require 'json'
def index
uri = '*****'
response = nil
begin
open(uri) do |http|
response = http.read
end
@json = JSON::parse(response)
rescue => text
# Exception handling
logger.error("GetMailListserror=" + text)
flash.now[:error] = 'Failed to get mailing list.'
end
end
ここでは、json パーサーは json フォーマットのキーが引用されていることを要求しています。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
win7でrubyのソースコードからコンパイルしてインストールする方法
-
Rubyを使ったFTPパスワードクラッキング
-
MongoDBに接続するためのRuby on Railsフレームワークアプリケーション チュートリアル
-
Ruby on RailsのWebプロジェクト構築のためのシンプルガイド
-
アプレットを置き換えるHTMLスクリプトを記述するRubyの例
-
Rubyのgemパッケージ管理およびgemソース構築のチュートリアル
-
Rubyのオブジェクト指向のアプローチによるプログラミング学習雑学
-
Rubyのプライベートとプロテクトを簡単にご紹介します。
-
RubyプログラムにおけるXMLファイルの作成と解析のための方法
-
Ruby on RailsにおけるCucumberの活用を解説します。