Django JSONField кодирует значения с плавающей точкой в ​​виде строк? - PullRequest
2 голосов
/ 24 июля 2011

Я сохраняю следующий простой, действительный объект JSON в модели в моем приложении Django:

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

Модель выглядит следующим образом:

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

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

Чтобы прочитать опубликованныеданные, я в основном делаю

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

Данные затем содержат тип ожидания (с плавающей точкой)

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'>

Затем я сохраняю данные следующим образом:

user_profile.data = json_data
user_profile.save()

и затем я читаю данные обратно, целые числа в порядке, но числа с плавающей запятой заключаются в кавычки, например:

print user_profile.data

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

Как я могу предотвратить ненужное преобразование чисел с плавающей запятой в строки?

Редактировать:

Возможно, нашли объяснение здесь: Rails JSON Сериализация десятичного числа добавляет цитаты

Мне все еще будут интересны другие объяснения, хотя.

1 Ответ

1 голос
/ 02 августа 2011

Этот ответ представляется наилучшим объяснением:

Единственный "безопасный" способ передачи десятичных знаков с языка A на язык B - это использование строки.Если ваш json содержит "rating": 98.79999999999999, он, вероятно, будет преобразован в 98.79999999999998 вашей средой выполнения JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...