Rails 关于 rails 读取 ajax 发送的 json 数据

douya0808 · 2012年05月08日 · 最后由 douya0808 回复于 2012年05月09日 · 7761 次阅读

发送过来的数据格式是个 json 数组, 然后 google 了下,说可以用 ActiveSupport::JSON.decode(json) 将 json 解析成 hash 格式

但是发送过来的 json 数据是这样的:

[
   {id:1,name:'稳妥',descn:'哈哈'},
   {name:'大壮',descn:'嘿嘿'},
   {name:'涛哥',descn:'哟哟'},
   {id:5,name:'乐呵',descn:'乐乐'}
]




如果我先把"["和"]"去掉的话 剩下的

{id:1,name:'稳妥',descn:'哈哈'},
{name:'大壮',descn:'嘿嘿'},
{name:'涛哥',descn:'哟哟'},
{id:5,name:'乐呵',descn:'乐乐'}




我需要逐行解析,看哪一行有 id 哪一行没有:) 我该如何挨行解析呢? 前辈给说下思路吧:) 嘿嘿

我想到传过来的本身就是个有 json 对象组成的数组,所以我干脆遍历数组

@data=params[:data]  
  @data.each_index { |data|
  hash=ActiveSupport::JSON.decode(data)
  }
  render :text=>"{success:true}"

但是一直错误 所以我试验了一下 ActiveSupport::JSON.decode()

def index
    @hash= ActiveSupport::JSON.decode({id:1,name:'稳妥',descn:'哈哈'})
    @test=@hash[:name]
end

在前台输出

<%=@test%>

结果错误提示:can't convert Hash into String:)

我看问题不是出在 [] 上,而是这个合法的 js object 作为 json 不合法,key 没用""包上,试试先用 execjs 调用 JSON.stringify 把这个 js object 修正成合法的 json 再解析

ActiveSupport::JSON.decode({id:1,name:'稳妥',descn:'哈哈'}) 这里明显有问题,ActiveSupport::JSON.decode 这个函数接受的是一个 json,也就是说是个 String。这里的参数是个 ruby 的 hash(1.9 的 hash 语法),不报错才怪。

@clearJiang @bluecoda 谢谢二位 一直用 ajax 读后台的 json 数据 格式差不多的都能解析,等到 post 的时候我就怎么也想不起来还有格式要求了:)

params[:data] 直接操作就行了呗,还转啥呢?

@vkill 因为传过来的数据是这样的:


@json='[
            {"name":"jack","gender":"boy"},
            {"name":"jack2","gender":"boy2"},
            {"name":"jack3","gender":"boy3"},
           ]'



是个大字符串 所以我无法直接这样解析

@test=ActiveSupport::JSON.decode(@json)



所以我就糊涂了 想把里面的{"name":"jack","gender":"boy"} {"name":"jack2","gender":"boy2"} 分别拿出来分别进行 ActiveSupport::JSON.decode:) 我还在研究怎么劈字符串-.-

我想到的是把外面的' '去掉 然后当作数组进行 each 遍历 @json.each{|json| xxxxx }

前辈是怎么作的呢?:)

@vkill 疑?好像可以直接解析成 [ {"name"=>"jack","gender"=>"boy"}, {"name"=>"jack2","gender"=>"boy2"}, {"name"=>"jack3","gender"=>"boy3"}, ] 这回好像不是字符串了 我想是个 hash 数组,因为我直接输出会出错 但是我用 each 遍历仍然出错-。-

好吧 我知道我栽在哪了 这里的 hash 取值只能 hash[“name”] 这样去 hash[:name] 取不到=。=瞄了个咪的

需要 登录 后方可回复, 如果你还没有账号请 注册新账号