免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8344 | 回复: 6
打印 上一主题 下一主题

简单例子Ruby解析Json [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-01 11:50 |只看该作者 |倒序浏览
本帖最后由 中关村村草 于 2011-04-01 11:54 编辑

简单实现Ruby解析Json




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

Ruby解析Json例子:
  1. json = '["a", "B", "C"]'
  2. puts "Unsafe #{unsafe_json
  3. (json).inspect}"  
  4. #输出Unsafe
  5. ["a", "B", "C"]
复制代码
Ruby解析Json把上面的json字符串解析成Array。这样的方法并 不 安 全,比如:
  1. json = 'puts "Danger
  2. Will Robinson"'
  3. puts "Unsafe #{unsafe_json
  4. (json).inspect}"
复制代码
又该输出什么呢?很遗憾,解析不出什么东西,跳出一个 警 告:warning: character class has `[' without escape安全的方法如下:
  1. module SafeJSON
  2. require 'monitor'   
  3. def SafeJSON.build_safe_json   
  4. ret = nil   
  5. waiter = ''   
  6. waiter.extend(MonitorMixin)   
  7. wait_cond = waiter.new_cond   
  8. Thread.start do   
  9. $SAFE = 4   
  10. ret = Proc.new {|json|   
  11. eval(json.gsub(/(["'])/s*:/s*(['"0-9tfn/[{])/){"#{$1}=>#{$2}"}) }   
  12. waiter.synchronize do wait_cond.signal   
  13. end   
  14. end  
  15. waiter.synchronize do wait_
  16. cond.wait_while { ret.nil? } end   
  17. return ret   end   
  18. @@parser = SafeJSON.build_safe_json   
  19. # Safely parse the JSON input   
  20. def SafeJSON.parse(input)   
  21. @@parser.call(input)   
  22. rescue SecurityError   
  23. return nil   
  24. end  
  25. end  
复制代码
包含这个Module,你就可以这样使用Ruby解析Json:
  1. peoples=SafeJSON.parse('{"peoples":[{"name":"site120","email":"site120@163.com","s e x":" 男"},
  2. {"name":"site120_2","email":"site120@163.com_2"," s e x ":" 男 _  2"}]}')  
  3. puts peoples["peoples"][1]["name"]

  4. #输出site120_2
复制代码
rails通过RJS内置了对AJAX的支持,也许用到json的机会并不多,不过作为一种数据交换的方便格式,还是值的注意。

论坛徽章:
0
2 [报告]
发表于 2011-04-03 21:05 |只看该作者
呵呵,村艹终于发这个帖了!!!

论坛徽章:
0
3 [报告]
发表于 2011-06-04 15:58 |只看该作者
很棒的帖子,国内讨论ROR的地方太少了。。

论坛徽章:
0
4 [报告]
发表于 2011-06-08 12:49 |只看该作者
回复 3# 虫子樱桃


    那就常来吧。

论坛徽章:
0
5 [报告]
发表于 2011-06-08 13:45 |只看该作者
感谢。俺的确没直接用过json。
另外这个json封装好像不能指定编码格式,比如UTF-8?

论坛徽章:
0
6 [报告]
发表于 2011-06-08 19:15 |只看该作者
回复 4# 2gua


    哈哈,会经常来的。多多指教,我是新手的。

论坛徽章:
0
7 [报告]
发表于 2011-06-08 20:50 |只看该作者
回复 6# 虫子樱桃


    新不新手,都没关系,只要喜爱Ruby就成,呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP