couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Filipe David Manana <>
Subject Re: [jira] [Commented] (COUCHDB-1407) JSON encoding of number changes
Date Mon, 13 Feb 2012 19:13:36 GMT
On Mon, Feb 13, 2012 at 6:52 PM, Kevin R. Coombes <>
>  If an application depends on the distinction between integers and floating
> point values, then it is up to the person writing the application to make
> sure this distinction survives.  As has already been pointed out, they can
> accomplish that goal by storing all numbers as (JSON) strings and using
> their application to decode/eval them.  This fix requires no changes to the
> CouchDB code.

I pretty much agree with that, the fix here is to do nothing other
than document the behaviour.

My point with this patch was not to get it merged, it was more a proof
of concept and to see what problems it posed - i mentioned in the
1.2.0 release first round thread the view collation problem, which
alone by itself it shows it's not a good idea.

> I would not even change the encoder to deal with decimal points and
> precision.  I would advocate just making sure that the documentation is
> clear on this point.  In particular, it is probably necessary to document
> (as a breaking change that may require people to rewrite some of their
> applications) the fact that 1.2 may drop trailing zeros after the decimal
> point.
> You cannot really promise to support different types of numbers without
> radically changing the CouchDB code.  You would then have to continually
> fight with JSON to get it to support something that is beyond its
> capabilities.  Maintenance would become a nightmare. Let's try to avoid that
> road....
>    Kevin
> On 2/13/2012 12:07 PM, Paul Joseph Davis (Commented) (JIRA) wrote:
>>     [
>> ]
>> Paul Joseph Davis commented on COUCHDB-1407:
>> --------------------------------------------
>> As mentioned on the dev@ thread, I'm pretty dead set against this
>> approach. While there seems to be some sort of general consensus that
>> storing numbers as uninterpreted bytes and repeating them back is the way to
>> go it really misses the entirety of the issue.
>> First, CouchDB has never claimed to pass numbers around while keeping byte
>> identical representations. This patch attempts to change that drastically
>> with a very large number of consequences that we haven't begun to
>> investigate.
>> Secondly, if we were to actually consider going this route then we'd also
>> be obliged to start looking at every other place where we change
>> representations internally as well.
>> Thirdly, if we were to do that then we'd also have to get into all of the
>> cases where we're stricter than JSON specifically allows and then try and
>> address all of those issues as well.
>> Basically, how about we just fix the encoder to spit out a decimal point
>> and an appropriate amount of precision and then start documenting our round
>> tripping limitations.
>>> JSON encoding of number changes
>>> -------------------------------
>>>                 Key: COUCHDB-1407
>>>                 URL:
>>>             Project: CouchDB
>>>          Issue Type: Bug
>>>          Components: HTTP Interface
>>>    Affects Versions: 1.2
>>>         Environment: Ubuntu 12.04 (alpha)
>>>            Reporter: Adam Lofts
>>>         Attachments: 0001-Only-validate-numbers-on-JSON-decoding.patch
>>> JSON encoding of Number has changed from 1.0.2 to 1.2. JSON only defines
>>> Number but this change causes issues in my app because python decodes the
>>> number as an int in 1.2.
>>> Test case:
>>> PORT=5985
>>> curl -X DELETE http://localhost:$PORT/test-floats/
>>> curl -X PUT http://localhost:$PORT/test-floats/
>>> curl -X PUT http://localhost:$PORT/test-floats/doc1 -H "Content-Type:
>>> application/json" -d "{ \"a\": 1.0 }"
>>> curl http://localhost:$PORT/test-floats/doc1
>>> Run against 1.0.2:
>>> {"ok":true}
>>> {"ok":true}
>>> {"ok":true,"id":"doc1","rev":"1-78e61304147429d3d500aee7806fd26d"}
>>> {"_id":"doc1","_rev":"1-78e61304147429d3d500aee7806fd26d","a":1.0}
>>> Run against 1.2:
>>> {"ok":true}
>>> {"ok":true}
>>> {"ok":true,"id":"doc1","rev":"1-78e61304147429d3d500aee7806fd26d"}
>>> {"_id":"doc1","_rev":"1-78e61304147429d3d500aee7806fd26d","a":1}
>> --
>> This message is automatically generated by JIRA.
>> If you think it was sent incorrectly, please contact your JIRA
>> administrators:
>> For more information on JIRA, see:

Filipe David Manana,

"Reasonable men adapt themselves to the world.
 Unreasonable men adapt the world to themselves.
 That's why all progress depends on unreasonable men."

View raw message