新手问题 求助 Rails Hash 格式化输出

dandananddada · 2015年04月15日 · 最后由 nightire 回复于 2015年04月15日 · 3800 次阅读

现在 print 出来的格式是这样的{ :label=> "Chrome", :data=> 2 },能不能按照另外的写法打印出来:{ label: "Chrome", data: 2 },因为前台要解析需要的格式是这样的。

试试 to_json

#1 楼 @ywjno 试过了,to_json 会转成 json 格式,label 被引号包括并不能被正确解析。。。好忧伤

to_json后如果是交由 javascript 来处理就是你要的格式

#3 楼 @dddd1919 to_json 转换成{ "label" : "Chrome" , "data" : "2" },但是我 js 需要的格式是{ label: "Chrome", data: 2 }这样的。。。如果能够让 hash 按照这样写法直接输出就好了。。。但是我不知道为什么默认输出是{ :label=> "Chrome" }这样的。

#2 楼 @dandananddada { "label" : "Chrome" , "data" : "2" } 就是标准格式了,javascript 不能处理那就是 js 的问题。 默认输出是因为 ruby 的 hash 表示是如此,又不是 json 格式。

#3 楼 @dddd1919 to_json 可以被解析。。。原来我单词拼错了,真是日了狗了。。。谢谢你哈~

#5 楼 @Tony612 是的,json 格式可以解析,是我转 hash 的时候把 label 拼错了。。。瞎眼啊。

传输都是文本,前台也需要 parse 的。

自己到 chrome 的控制台试一下就知道了。

JSON.parse('{ "label" : "Chrome" , "data" : "2" }')

另外,前台一般都不需要碰触这么 low level 的事情。就算是 jquery 都可以完美处理。你如果需要写 JOSN.parse,说明你的代码肯定有问题。

#9 楼 @billy 这话说的不妥吧,jQuery 也无非就是调用了 parse。对于 JSON 来说就是一个 parse 一个 stringify 俩方法,这可是标准的 ecmascript API,做前端不可不知啊。而且用到它们的场景很多,也不能说代码就有问题,武断了些。

@nightire 就是因为场景多,所以应该有抽象。一般都用库,要么自己写简单抽象。楼主的场景是处理服务端数据这一块的业务代码,在这里如果你需要写这个就说明抽象不够,代码重复的可能性高。这些 low level API 当然必须知道,但知道并不意味着你必须要写进代码中。

#11 楼 @billy OK,如果只谈写应用的话,这么说无妨,不过这个前提很重要。另外我不觉得像这样的 API 有多 low level,否则的话 forEach 这样的方法也不要直接调用了,因为从标准来看它们之间没有什么 level 差,顶多说对于数据的操作应尽可能封装成高阶接口,可有时候用了这些原生 API 也不能就认为 “有问题”,因为有时候应用场景就是很简单,我没必要引个库进来,这很常见。

即便是在大型应用中也不见得就不会有直接调用它们的场景,比如说在一个 angular 应用里,多数时候数据操作都是高度抽象的,但难免有时候要写个拦截器之类的东西对特定 http 响应做处理,这时候你要进入到数据处理层的内部,尽管不是和业务逻辑直接关联可也是前置需求的一部分。因此我说这个前提很重要,否则对于不熟悉前端的人来说看到你说的话说不定会吓的不敢写 JSON.parse 了。

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