使用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的机会并不多,不过作为一种数据交换的方便格式,还是值的注意。

文章转自庄周梦蝶  ,原文发布时间5.17

时间: 2024-10-27 10:48:47

使用ruby解析json的相关文章

Ruby和Ruby on Rails中解析JSON格式数据的实例教程_ruby专题

Ruby解析JSON Ruby解析Json例子: json = '["a", "B", "C"]' puts "Unsafe #{unsafe_json (json).inspect}" #输出Unsafe ["a", "B", "C"] Ruby解析Json把上面的json字符串解析成Array.这样的方法并不安全,比如: json = 'puts "Da

安卓小白 求大神解析json 求代码

问题描述 安卓小白 求大神解析json 求代码 { "date": "20140617", "stories": [ { "title": "千万不要干傻事", "ga_prefix": "09", "images": [ "http://www.baidu.com/img/baidu_sylogo1.gif" ], "

Ajax中解析Json的两种方法对比分析

  这里给大家介绍的是Ajax中解析Json的两种方法对比分析,十分的实用,本文为学习笔记,属新手文章,欢迎指教! eval(); //此方法不推荐 JSON.parse(); //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: ? 1 2 3 4 5 var jsonDate = '{ "name":"周星驰","age":23 }'   var jsonObj = eval( '(' + jsonDate + ')' );

超级好用的解析JSON数据的网站

超级好用的解析JSON数据的网站 网址 http://json.parser.online.fr/beta/ 效果图 测试数据 {"city":{"id":1816670,"name":"Beijing","coord":{"lon":116.397232,"lat":39.907501},"country":"CN",&quo

xcode-使用SBJsonParser不能解析JSON字符串

问题描述 使用SBJsonParser不能解析JSON字符串 Json字符串是:""{'message':'Test Driver'}"" 如果我NSlog代码:NSLog(@""%@""[parser objectWithString:[request responseString] error:nil]); 解析器是SBJsonParser的一个类 然后就Output: (null) 有没用其他JSON库可以解析这个字符串

Jquery解析json字符串及json数组的方法

  本文实例讲述了Jquery解析json字符串及json数组的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 6

Jquery解析json数据详解

 本篇文章主要是对Jquery解析json数据进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 最近被jquery折磨了一番,倒腾了一个jquery解析json的demo,本demo想实现从asp.net后台实例化dataSet或者dataTable数据集,将dataSet转换成json并返回给客户端,客户端用jquery getJson方法解析出来并显示在页面上.   首先简单介绍一下getJson方法   Jquery.getJson(url,[data],[callback]

js/jquery解析json和数组格式的方法详解

 本篇文章主要是对js/jquery解析json和数组格式的方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 在解析之前,我们必须弄清楚几个概念:数组,关联数组以及json之间有哪些区别和联系点?   一.概念介绍 1.数组   语法:  ECMAScript v3规定了数组直接量的语法,JavaScript 1.2和JScript 3.0实现了它.可以把-个用逗号分隔的表达式列表放在方括号中,创建并初始化-个数组.这些表达式的值将成为数组元素.例如:   var a = [1

js使用eval解析json

 eval的用法eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句,下面给出eval解析json的示例 先来说eval的用法,内容比较简单,熟悉的可以跳过 eval函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. 需要特别注意的是对象声明语法"{}"并不能返回一个值,需要用括号括起来才会返回值,简单示例如下:    代码如下: var s1='"a" +