相关文章推荐
茫然的春卷  ·  在vb ...·  10 月前    · 
不爱学习的伏特加  ·  SeaTable ...·  1 年前    · 
任性的紫菜  ·  Azure Data Factory ...·  1 年前    · 
+关注继续查看
rails1.1已经加入对json的全面支持,现在的Array,Hash,String,Object...等等都有一个to_json方法,生成 json字符串。反过来,我们该如何解析json呢?查了下http://www.json.org/上面ruby语言的链接,在rubyforge上找到了一个项目。解析json对ruby来说非常简单,只要一行代码:



None.gif json = ' ["a", "B", "C"] '
puts " Unsafe #{unsafe_json(json).inspect} " # 输出Unsafe ["a", "B", "C"]
把上面的json字符串解析成Array。这样的方法并不安全,比如:
None.gif json = ' puts "Danger Will Robinson" '
puts " Unsafe #{unsafe_json(json).inspect} "
None.gif
又该输出什么呢?很遗憾,解析不出什么东西,跳出一个警告:
warning: character class has `[' without escape


安全的方法如下: None.gif module SafeJSON
None.gif require
' monitor '
None.gif def SafeJSON.build_safe_json
None.gif ret
= nil
None.gif waiter
= ''
None.gif waiter.extend(MonitorMixin)
None.gif wait_cond
= waiter.new_cond
None.gif
None.gif Thread.start
do
None.gif $SAFE
= 4
ExpandedBlockStart.gif ContractedBlock.gif ret
= Proc. new dot.gif { | json |
ExpandedSubBlockStart.gif ContractedSubBlock.gif eval(json.gsub(
/ ([ " '])/s*:/s*([' " 0 - 9tfn / [ dot.gif {]) / ) dot.gif { " #{$1}=>#{$2} " } )
ExpandedSubBlockEnd.gif }

InBlock.gif waiter.synchronize
do
InBlock.gif wait_cond.signal
InBlock.gif end
InBlock.gif end
InBlock.gif waiter.synchronize
do
ExpandedSubBlockStart.gif ContractedSubBlock.gif wait_cond.wait_while
dot.gif { ret.nil ? }
InBlock.gif end
InBlock.gif
return ret
InBlock.gif end
InBlock.gif @@parser
= SafeJSON.build_safe_json
InBlock.gif
InBlock.gif # Safely parse the JSON input
InBlock.gif def SafeJSON.parse(input)
InBlock.gif @@parser.call(input)
InBlock.gif rescue SecurityError
InBlock.gif
return nil
InBlock.gif end
InBlock.gif 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

前后端JSON解析差异问题与思考
JSON是目前数据网络传输的常用格式,key-value的格式简单明了。但实际处理中,前后端对于JSON的解析规则其实存在一些差异,这些差异可能会引起预期外问题。本文结合一次线上问题处理经验,对前后端JSON解析进行了分析与思考,
Android:解析Json异常 Expected a string but was BEGIN_OBJECT at
今天解析后端数据时,发现了这个报错:Expected BEGIN_OBJECT but was STRING at 看来是自己哪儿解析错误了。 因为数据的特殊性,后端返回的Json串里面可能还会有Json数据,可能嵌套了三次层,
如何使用Request方法发送Post请求、JSON文件介绍、Python中的JSON数据以及获取到的JSON数据的解析。
如何使用Request方法发送Post请求、JSON文件介绍、Python中的JSON数据以及获取到的JSON数据的解析。