2

I'm saving the following simple, valid JSON object to a model in my Django app:

{
    "start_date": 1311471044.24338
    "post_count": 25
}

The model looks like this:

from django.db import models
from django_extensions.db.fields import json as json

class UserProfile(models.Model):
   data = json.JSONField()

To read the posted data, I basically do

posted_data = request.FILES.get('posted_data').read()
json_data = simplejson.loads(posted_data)

The data then contains the expect type (float)

logging.debug( "start_date type: " + str(type(json_data.get('start_date'))))
logging.debug( "post_count type: " + str(type(json_data.get('post_count'))))

>> 2011-07-24 10:03:01,636 DEBUG start_date type: <type 'float'>
>> 2011-07-24 10:03:01,636 DEBUG post_count type: <type 'int'>

I then save the data like this:

user_profile.data = json_data
user_profile.save()

and then I read the data back, integers are fine, but floating point numbers are quoted, for example:

print user_profile.data

{
    "post_count : 25
    "start_date": "1311471044.24338"
}

How can I prevent floating point numbers from being turned to strings unnecessarily?

Edit:

May have found an explanation here: Rails JSON Serialization of Decimal adds Quotes

I still would be interested in other explanations though.

Community
  • 1
  • 1
amrox
  • 6,207
  • 3
  • 36
  • 57

1 Answers1

1

This answer seems to be the best explanation:

The only "safe" way to hand decimals from language A to language B is to use a String. If your json contains "rating": 98.79999999999999 it will probably be converted to 98.79999999999998 by your JavaScript runtime.

Community
  • 1
  • 1
amrox
  • 6,207
  • 3
  • 36
  • 57