`

使用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的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,...

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

    ruby-1.9.1-p0-i386-mswin32.rar

    例如,`require 'json'`可以加载JSON库,然后使用`JSON.parse`方法解析JSON字符串为Ruby对象,`JSON.generate`则用于将Ruby对象转换为JSON格式的字符串。 在实际应用中,Ruby的灵活性和强大的库支持使其成为Web开发...

    json解析的几个工具包好gson,jackson,json_lib

    在Java中,有多个库可以帮助我们解析和生成JSON,如Gson、Jackson和json-lib。以下是对这三个库的详细介绍: 1. Gson: Gson是Google提供的一个开源库,用于将Java对象转换为JSON字符串,反之亦然。它提供了简单...

Global site tag (gtag.js) - Google Analytics