["AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AAAAA"] 这种字符串,在 java 中我是用 google 的 Gson 转化的, new Gson.toJson(string,new ArrayList()),然后得到一个 list,返回 json 的时候就自动转换为 json 数组了,在 rails 中有类似的方法吗?
“[\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\"]”rails 返回的值是这样的 是一个字符串,我想要的是这样的 ["AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AA_AA","AAAAA"] 是一个数组
#6 楼 @wl1991724 是不是写了两重 to_json
了?render json:
就会自动调用 to_json
。你用虚构的代码我看不出问题,正常 render json: models
就是输出 json。
真实例子:
#6 楼 @wl1991724 另外,firebug 也是终端,字符串也要加引号。你用 javascript 的 json 解析器解析看看。
> JSON.parse("[\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\"]")
["AA_AA", "AA_AA", "AA_AA", "AA_AA", "AA_AA", "AA_AA", "AA_AA", "AA_AA", "AA_AA", "AA_AA"]
@rei 我用 JSON.parse 是能转化为 jsonArray 的,只是在 java 中定义个 getList 方法,会从 string 转成 list,然后 render json 的时候 list 会自动转成 jsonArray,不需要再用 JSON.parse 了,我以为 rails 也会有这种方法呢,看来还是不一样呀,还有能给我推荐下 rails 的教程嘛,我把 rails guides 看完了,发现有不少地方讲的不详细,比如 active Record 的事务,rails 的统一异常处理,format.json|html|yaml 这些东西都找不到啊
#9 楼 @wl1991724 jsonArray 是个 Java 内存中的对象,最终输出的时候是转化为字符串的。你觉得不需要 JSON.parse 是因为 ajax 库已经把这件事做了。
你在 Ruby 终端试试:
puts "[\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\",\"AA_AA\"]"
是不是要的 JSON?
我觉得楼主主要纠结的地方是,这是字符串的终端表示(irb,浏览器 console):
"string"
这是字符串的纯文本表示(API 输出):
string
这两个是一样的。
@rei 非常感谢,再麻烦您一下,我用 rails render json 返回的日期类型是 2015-05-15T09:38:55.000Z 这样的,我想返回 yyyy—MM-dd HH:mm:ss 怎么做呢?
方法一:覆盖 Model 的 as_json
方法
http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html
def as_json
super.merge(
created_at: created_at.strftime( FORMAT_STRING ) # http://ruby-doc.org/core-2.2.0/Time.html#method-i-strftime
)
end
方法二:用 https://github.com/rails/jbuilder 逐个字段定制。
@rei 谢谢您,我试了一下,是可以的,但是我这样我需要 model 里都重写一个 as_json 方法,然后调用 model.as_json,这样写是不是有点违背 DRY 了啊,怎么组织代码呢,在 active record::Base 里写吗?
#17 楼 @wl1991724 要一次更改全局可以覆盖 ActiveSupport::TimeWithZone
,但你要确定会不会破坏其它地方。
2015-05-15T09:38:55.000Z
就是 JavaScript 能解析的 ISO-8601 标准格式,如果不想违背 DRY,是不是不应该修改这个格式呢? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse
application.rb 里
config.time_zone = 'Beijing'
这是告诉 Rails 用哪个时区来显示数据库时间,但是,查找的时候,显示的是 utc 时间,也就是数据库保存的时间,当我们调用属性的时候,会转成刚才设置的时区时间。
2.2.2 :032 > Product.first
=> #<Product id: 1, name: "Hat", price: #<BigDecimal:7f8e7c971208,'0.999E1',18(36)>, description: nil, created_at: "2015-06-02 06:10:54", updated_at: "2015-06-02 06:58:59">
2.2.2 :033 > Product.first.created_at
=> Tue, 02 Jun 2015 14:10:54 CST +08:00