简单实现Ruby解析Json

Ruby语言的通途可谓是非常广泛,而且都能使用简单灵活的方式帮助我们实现许多功能需求。Ruby解析Json就可以用一种非常简单的方法来实现。

Ruby解析Json例子:

  1. json = '["a", "B", "C"]'
  2. puts "Unsafe #{unsafe_json
    (json).inspect}" 
  3. #输出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安全的方法如下:

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:

相关推荐