From d53877880835db241e1afeeb9bd6a8037c32e2fd Mon Sep 17 00:00:00 2001 From: Sebi Burkhard Date: Tue, 1 May 2012 11:28:46 +0700 Subject: JSON: encode BigDecimal NaN/Infinity as null. --- activesupport/lib/active_support/json/encoding.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'activesupport/lib/active_support') diff --git a/activesupport/lib/active_support/json/encoding.rb b/activesupport/lib/active_support/json/encoding.rb index e0dee0e072..ef45a546b6 100644 --- a/activesupport/lib/active_support/json/encoding.rb +++ b/activesupport/lib/active_support/json/encoding.rb @@ -183,6 +183,8 @@ class Numeric end class Float + # Encoding Infinity or NaN to JSON should return "null". The default returns + # "Infinity" or "NaN" what breaks parsing the JSON. E.g. JSON.parse('[NaN]'). def as_json(options = nil) finite? ? self : NilClass::AS_JSON end #:nodoc: end @@ -195,7 +197,7 @@ class BigDecimal # That's why a JSON string is returned. The JSON literal is not numeric, but if # the other end knows by contract that the data is supposed to be a BigDecimal, # it still has the chance to post-process the string and get the real value. - def as_json(options = nil) to_s end #:nodoc: + def as_json(options = nil) finite? ? to_s : NilClass::AS_JSON end #:nodoc: end class Regexp -- cgit v1.2.3