Ruby和Ruby on Rails中解析JSON格式数据的实例教程(ruby woo)深度揭秘

随心笔谈2年前发布 admin
191 0 0

文章摘要

这篇文章介绍了如何在Ruby中安全地解析JSON数据。首先,文章展示了不安全的JSON解析方法,如直接使用`puts`语句调用`unsafe_json`方法会导致错误输出或安全警告。接着,文章介绍了使用`SafeJSON`库来安全解析JSON字符串。该库通过引入`MonitorMixin`和监视混入机制,防止恶意代码注入。示例展示了如何使用`SafeJSON`模块来解析JSON数据,并通过`SecurityError`捕获异常。 此外,文章还提到Ruby on Rails中通过`RJS`插件内置了对AJAX的支持,提供了JSON处理的便利方法。文章提醒用户,当使用`JSON::parse`方法时,需注意JSON对象的键必须带引号,否则会导致解析异常。文章末尾还推荐了其他相关文章,供读者进一步学习。



Ruby解析JSON

Ruby解析Json例子:

json='[“a”, “B”, “C”]’
puts “Unsafe #{unsafe_json
(json).inspect}”
#输出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/[{])/) 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(‘
‘)
puts peoples[“peoples”][1][“name”]
#输出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
# 异常处理
logger.error(“GetMailListserror=” + text)
flash.now[:error]=’获取邮件列表失败。’
end
end

这里json解析器需要json格式的key必须带引号,如果没有引号的话会解析出现异常。

您可能感兴趣的文章:使用Ruby来处理JSON的简单教程Ruby中嵌套对象转换成json的方法Ruby解析处理YAML和json格式数据

© 版权声明

相关文章