`

使用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库

    1. **解析JSON**: 在Ruby中,可以使用`require 'json'`引入JSON库。然后,`JSON.parse`方法可以将JSON字符串转化为Ruby的数据结构,如哈希或数组。例如: ```ruby require 'json' json_string = '{"name":"John...

    Ruby JSON

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

    ruby-ruby的json实现-优质项目.zip

    在解析JSON时,如果遇到无效的JSON格式,`JSON.parse`会抛出`JSON::ParserError`。因此,应当在解析时捕获这个异常以提供适当的错误处理。 8. **编码设置** 如果需要处理非ASCII字符,可以设置`JSON.default_...

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

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

    Ruby与JSON:无缝数据交换的秘诀

    Ruby的`json`模块提供了`JSON.parse`和`JSON.generate`两个核心方法,分别用于解析JSON字符串和生成JSON格式的字符串。 #### 解析JSON ```ruby require 'json' json_string = '{"name": "John", "age": 30, "city...

    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...

    Linux JSON 命令总结.zip_json linux_shell解析json

    本文将深入探讨如何在Linux系统下使用Shell命令来解析JSON数据。 首先,我们介绍几个常用的Linux命令行工具,它们专门用于处理JSON格式的数据: 1. **`jq`**: `jq`是Linux下的一个强大的JSON处理器,它可以用来...

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

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

    使用ruby解析awdb离线库

    例如,可以使用“CSV”库来解析CSV格式的文件,使用“json”库来解析JSON格式的文件。对于更复杂的数据格式,如XML或自定义格式,Ruby的内置正则表达式功能将非常有用。通过正则表达式我们可以匹配并提取出所需的...

    Ruby的JSON对象签名和加密(JOSE).zip

    在Ruby中,`jose`库可以用来生成和解析JWT,包括设置有效期限、添加自定义声明以及验证签名。 使用`jose`库时,你需要了解一些核心概念和方法,例如: 1. **Key Management**: JOSE支持多种加密和签名算法,如HMAC...

    json必须要用到的依赖包

    它提供了`JSON.parse`来解析JSON字符串和`JSON.generate`来生成JSON。对于更复杂的场景,`oj`或`yajl-ruby`等库可以提供更高的性能。 这些依赖包在处理JSON数据时,不仅可以进行基本的编码和解码,还能进行对象映射...

    json:Ruby的JSON实现

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

    json的应用手册

    3. 在服务器端使用JSON:展示如何在诸如Node.js、Python的Django或Flask、Ruby on Rails等服务器端技术中使用JSON。 4. 在Web应用中使用JSON:详述JSON在Web前后端数据交互中的应用,例如使用AJAX与服务器通信。 5. ...

    android json解析代码生成器

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

    Ruby-Jbuilder通过一个构建式DSL创建JSON结构

    在构建RESTful API时,数据通常以JSON(JavaScript Object Notation)格式传输,因为JSON轻量、易于解析,并且被广泛支持。Ruby中的Jbuilder库就是为了方便开发者创建JSON结构而设计的。 Jbuilder是一个Ruby gem,...

    使用Ruby脚本动态修改Xcode项目中的xcodeproj文件

    本文将探讨如何使用Ruby脚本动态修改Xcode项目中的xcodeproj文件,以提高开发效率和减少人为错误。 在使用Ruby脚本修改xcodeproj文件之前,首先需要了解xcodeproj文件的本质。xcodeproj实际上是一个包含了XML结构的...

    Json使用需要依赖包

    针对“Json使用需要依赖包”的主题,我们将详细介绍在不同编程语言中使用JSON所需的依赖包。 1. **Java** 在Java中,处理JSON的主要库有Jackson、Gson和org.json。Jackson是目前最流行的Java JSON库,它提供了高效...

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

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

Global site tag (gtag.js) - Google Analytics