JSON里的引号

前几天升级了下Rails的版本和一些Gems, 今天测试API程序里发现一个JSON对单引号和双引号有区分,
引用
POST /transfers.json
{'transfer': {'account' : 'RX-1234567', 'amount': '1.23', 'currency': 'USD'}}

调试返回500及
引用
MultiJson::DecodeError
743: unexpected token at '{'transfer': {'account' : 'RX-1234567', 'amount': '1.23', 'currency': 'USD'}}  '

json_pure (1.6.1) lib/json/common.rb:148:in `parse'
json_pure (1.6.1) lib/json/common.rb:148:in `parse'
multi_json (1.0.3) lib/multi_json/engines/json_gem.rb:13:in `decode'
multi_json (1.0.3) lib/multi_json.rb:65:in `decode'
activesupport (3.1.1) lib/active_support/json/decoding.rb:12:in `decode'
actionpack (3.1.1) lib/action_dispatch/middleware/params_parser.rb:47:in `parse_formatted_parameters'
actionpack (3.1.1) lib/action_dispatch/middleware/params_parser.rb:17:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/flash.rb:243:in `call'
rack (1.3.5) lib/rack/session/abstract/id.rb:195:in `context'
rack (1.3.5) lib/rack/session/abstract/id.rb:190:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/cookies.rb:331:in `call'
activerecord (3.1.1) lib/active_record/query_cache.rb:62:in `call'
activerecord (3.1.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:477:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (3.1.1) lib/active_support/callbacks.rb:392:in `_run_call_callbacks'
activesupport (3.1.1) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.1.1) lib/action_dispatch/middleware/callbacks.rb:28:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/reloader.rb:68:in `call'
rack (1.3.5) lib/rack/sendfile.rb:101:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'
railties (3.1.1) lib/rails/rack/logger.rb:13:in `call'
rack (1.3.5) lib/rack/methodoverride.rb:24:in `call'
rack (1.3.5) lib/rack/runtime.rb:17:in `call'
activesupport (3.1.1) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.3.5) lib/rack/lock.rb:15:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/static.rb:53:in `call'
railties (3.1.1) lib/rails/engine.rb:456:in `call'
railties (3.1.1) lib/rails/railtie/configurable.rb:30:in `method_missing'

的错误了, 检查后将单此号换成双引号
引用
POST /transfers.json
{"transfer": {"account" : "RX-1234567", "amount": "1.23", "currency": "USD"}}

程序就没问题了.

之前的json gem版本也不记得是多少了, 现在的是
引用
json_pure (1.6.1)
multi_json (1.0.3)


Google了一下, 网上也有人说有这样的问题, PHP, jQuery都有这样的问题, 看来是做了一些限制,

后来找到一些说明:
rfc4627 2.5 String 里明确规定queation marks 的值是 %x22, 也就是双引号

目前还不清楚是不是真的这样, 只能用双引号, 而不是单引号, 先记下吧, 再研究一下.
:evil:

ref.
http://json.org
http://www.ietf.org/rfc/rfc4627.txt
http://ejohn.org/blog/the-state-of-json/

你可能感兴趣的:(JavaScript,json)