Tôi đã làm một số mã hoạt động. tôi đã thực hiện những thay đổi trong các tập tin sau đây
settings.py
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'utils.renderers.PalJSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
)}
utils/renderers.py
from rest_framework.renderers import JSONRenderer
from rest_framework.utils.encoders import JSONEncoder
from json.encoder import encode_basestring_ascii, encode_basestring, INFINITY, _make_iterencode
class CustomJSONEncoder(JSONEncoder):
def iterencode(self, o, _one_shot=False):
"""Encode the given object and yield each string
representation as available.
For example::
for chunk in JSONEncoder().iterencode(bigobject):
mysocket.write(chunk)
"""
# Hack to enforce
c_make_encoder = None
if self.check_circular:
markers = {}
else:
markers = None
if self.ensure_ascii:
_encoder = encode_basestring_ascii
else:
_encoder = encode_basestring
def floatstr(o, allow_nan=self.allow_nan, _repr=lambda o: format(o, '.2f'), _inf=INFINITY, _neginf=-INFINITY):
# Check for specials. Note that this type of test is processor
# and/or platform-specific, so do tests which don't depend on the
# internals.
if o != o:
text = 'NaN'
elif o == _inf:
text = 'Infinity'
elif o == _neginf:
text = '-Infinity'
else:
return _repr(o)
if not allow_nan:
raise ValueError(
"Out of range float values are not JSON compliant: " +
repr(o))
return text
if (_one_shot and c_make_encoder is not None and self.indent is None):
_iterencode = c_make_encoder(
markers, self.default, _encoder, self.indent,
self.key_separator, self.item_separator, self.sort_keys,
self.skipkeys, self.allow_nan)
else:
_iterencode = _make_iterencode(
markers, self.default, _encoder, self.indent, floatstr,
self.key_separator, self.item_separator, self.sort_keys,
self.skipkeys, _one_shot)
return _iterencode(o, 0)
class PalJSONRenderer(JSONRenderer):
encoder_class = CustomJSONEncoder
Nguồn
2016-03-14 07:05:49
gì sai với trở 3,333333? mọi người tiêu dùng api của bạn có thể hiển thị nó là 3,33. Cho phép khách hàng xử lý định dạng. – Ali
Trong Android, họ cần xác định kiểu dữ liệu như float, int hoặc long. giả sử dữ liệu ban đầu là ** 4.56 ** nhưng hiện tại đến ** 3.3333333 **. do đó rất khó để thay đổi tất cả các kiểu dữ liệu nổi từ lâu. thats lý do tại sao tôi cần giải pháp tại ** back-end ** không phải khách hàng kết thúc. –
Tôi cho rằng vinay là đúng, tôi cũng phải đối mặt với cùng một vấn đề. chuyển đổi chúng từ phía khách hàng (đặc biệt là android không phải là một ý tưởng hay) @vinaykumar, mọi người sẽ vui vẻ trả lời câu hỏi của bạn, nếu bạn cũng viết ra những nỗ lực của mình (bạn đã thử gì) với câu hỏi. Tôi đoán bạn cần phải monkeypatch json.dumps đó là nhận được gọi là từ lớp JSONEncode. – Pawan