在Rails控制台中
> h_json = {key: "value"}.to_json;
#=> "{\"key\":\"value\"}"
> s_json = %Q|{"key": "value"}|
#=> "{\"key\": \"value\"}"
> s_json.class
#=> String
> h_json.class
#=> String
我们可以看到h_json
和s_json
具有相同的String类,看起来相同,但是
#=> "{\"key\": \"value\"}"
> s_json == h_json
#=> false
他们并不相等,我不明白为什么。
答案 0 :(得分:2)
如果您检查了to_json函数的源代码,s_json
中有一个空格
# File activesupport/lib/active_support/json/encoders/hash.rb, line 33
def to_json(options = nil) #:nodoc:
hash = as_json(options)
result = '{'
result << hash.map do |key, value|
"#{ActiveSupport::JSON.encode(key.to_s)}:#{ActiveSupport::JSON.encode(value, options)}"
end * ','
result << '}'
end
此函数不会在冒号:
和值之间添加空格。
实际上,
h_json = "{\"key\":\"value\"}"
和
s_json = "{\"key\": \"value\"}"
如果设置s_json = "{\"key\":\"value\"}"
,则必须相等。