`

使用ruby解析json

阅读更多
rails1.1已经加入对json的全面支持,现在的Array,Hash,String,Object...等等都有一个to_json方法,生成 json字符串。反过来,我们该如何解析json呢?查了下http://www.json.org/上面ruby语言的链接,在rubyforge上找到了一个项目。解析json对ruby来说非常简单,只要一行代码:



例子:
json = '["a", "B", "C"]'
 
puts "Unsafe #{unsafe_json(json).inspect}"   #输出Unsafe ["a", "B", "C"]






把上面的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,你就可以这样使用:
peoples=SafeJSON.parse('{"peoples":[{"name":"site120","email":"site120@163.com","sex":"男"},{"name":"site120_2","email":"site120@163.com_2","sex":"男_2"}]}')

puts peoples[
"peoples"][1]["name"]  #输出site120_2







rails通过RJS内置了对AJAX的支持,也许用到json的机会并不多,不过作为一种数据交换的方便格式,还是值的注意。
分享到:
评论
1 楼 wangxin0072000 2009-10-09  
eval(json.gsub(/(["'])/s*:/s*(['"0-9tfn/[{])/){"#{$1}=>#{$2}"})这行报错,这是问什么呢?

相关推荐

    ruby使用json库

    ruby解析jsonruby解析

    Ruby JSON

    但是,如果你使用的是最新版本的 Ruby,可能已经安装了 gem,解析来我们就可以使用以下命令来安装Ruby JSON 模块: $gem install json 使用 Ruby 解析 JSON 以下为JSON数据,将该数据存储在 input.json 文件中: ...

    使用Ruby来处理JSON的简单教程

    但是,如果你使用的是最新版本的 Ruby,可能已经安装了 gem,解析来我们就可以使用以下命令来安装Ruby JSON 模块: $gem install json 使用 Ruby 解析 JSON 以下为JSON数据,将该数据存储在 input.json 文件中:...

    Ruby和Ruby on Rails中解析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...

    ruby2json:简单的在线工具,可将ruby JSONhash控制台输出转换为正确的JSON。 https:ruby2json.herokuapp.com

    翻译=>到: 将nil转换为null 尝试解析JSON。 漂亮地打印JSON。执照MIT许可证(MIT)版权所有(c)2016VojtěchKusý 特此免费授予获得此软件和相关文档文件(“软件”)副本的任何人无限制地处理软件的权利,包括但...

    json:Ruby的JSON实现

    Ruby的JSON实现 描述 这是根据RFC 7159 的JSON规范的实现。 从版本1.0.0开始,将提供两个变体: 一个纯ruby变体,它依赖于ruby标准库的一部分iconv和stringscan扩展。 本地扩展变体要快得多,它可以用C或Java部分...

    android json解析代码生成器

    通过编写配置文件,该代码生成器能自动生成相应的bean,和解析json的代码。 你需要做的是,有一个ruby环境,将配置文件写在test.conf中,然后shell的重定向即可。 如生成Bean文件: ruby BeanGen.rb > Bean.java 生成...

    JSON-Grep:用于解析JSON文档的命令行工具和API

    JGrep是用于基于逻辑表达式解析JSON文档的命令行工具和API。 安装: jgrep可以作为gem来使用: gem install jgrep JGrep二进制用法: jgrep [expression] -i foo.json 或者 cat "foo.json" | jgrep ...

    Ruby最快的Json解析器,simdjson的包装器-C/C++开发

    用于simdjson的Ruby包装器(每秒解析千兆字节JSON)FastJsonparser用于Ruby的最快的Json解析器用于simdjson的Ruby包装器(每秒解析千兆字节)simdjson库使用常用的SIMD指令和微并行算法来解析JSON的速度比其他方法快...

    multi_json, JSON处理的通用可以切换后端.zip

    multi_json, JSON处理的通用可以切换后端 MultiJSON 许多 ruby 库解析 JSON,每个人都有自己喜欢的JSON编码器。 而不是选择一个JSON编码器并强制使用库的用户,而是使用 MultiJSON,这将简单地选择最快的JSON编码器...

    moran:RubyMotion Android的简单JSON解析和生成

    moran(mo-RAN)是的简单JSON解析器和生成器。 它的提供了一个Ruby包装器 moran模拟标准的Ruby JSON API,提供parse和generate方法: hash = Moran . parse ( json_string ) json_string = Moran . generate ( ...

    microformats-ruby:Ruby宝石,可解析包含microformatsmicroformats2HTML并返回Ruby对象,Ruby哈希或JSON哈希

    Ruby宝石,用于解析包含微格式HTML文档。 主要特点 与和语法兼容。 提供一个用于从URL,文件或字符串中提取微格式。 入门 在安装和使用microformats-ruby之前,您需要安装Ruby 2.4.10(或更高版本)。 建议您使用...

    Ruby JSON Path-crx插件

    保存首选语法设置•在“ Chrome开发工具元素”标签中添加“ JSON”窗格以查看应用程序/ json脚本标签的解析内容•JSONP支持•快速,甚至在长页面上使用•在任何有效的JSON页面上均可使用– URL无关紧要•语法突出...

    crack, 真正简单的JSON和XML解析,从Merb和 Rails.zip

    crack, 真正简单的JSON和XML解析,从Merb和 Rails 裂纹 真正简单的JSON和XML解析,从Merb和 Rails 。 XML解析器从Merb中提取出来,JSON解析器从 Rails 中剥离。 我没有信用,只是打包供大家使用,方便使用。兼容性...

    check_http_json:Nagios插件可从HTTP响应中解析JSON

    这是Nagios的插件,将从HTTP响应中解析JSON。 它是用Ruby编写的,已知可以在1.8.7、1.9.3和2.4.0版本中使用。 用法 Usage: ./check_http_json.rb -u <URI> -e <element> -w <warn> -c <crit> -h, --help Help ...

    rvdata2json:相互转换rvdatarvdata2和json

    ruby to_json.rb 将json转换为rvdata ruby to_rvdata.rb 适用于RPG Maker VX Ace 将rgss3 / to_json2 / to_rvdata2.rb放入您的项目文件夹。 将rvdata2转换为json ruby to_json2.rb 将json转换为rvdata2 ruby to...

    subjoin:用于解析 JSON-API 的 Ruby 库

    一切都从一个文档开始,特别是一个Subjoin::Document —— 相当于一个,您可以使用 URI 创建它: require "subjoin" doc = Subjoin::Document.new(URI("http://example.com/articles")) (此处的所有示例均基于中...

    json-ld:用于RDF.rb的Ruby JSON-LD读写器

    JSON :: LD将 LD解析并序列化为并实现扩展,压缩和成帧API接口。 它还从HTML提取JSON-LD。 JSON :: LD现在可以用于根据RDFS / OWL定义创建上下文,并且可以选择包含本体本身的JSON-LD表示形式。 当前可通过script/...

Global site tag (gtag.js) - Google Analytics