我有以下django词典 -
titles_to_update = Title.objects.exclude(
error_message__startswith="No"
).filter(
is_successful=False,
updatebatch__is_completed=False
).values(
'id',
'apple_id',
'promotion_start_date',
'promotion_end_date',
'sd_price_tier',
'hd_price_tier'
)
# {'hd_price_tier': 101, 'sd_price_tier': 2, 'apple_id': 270201401L,
'promotion_start_date': datetime.date(2014, 6, 27), 'id': 25332L,
'promotion_end_date': datetime.date(2014, 6, 30)}...]
return HttpResponse(simplejson.dumps(titles_to_update))
这给了我错误:
[my object] is not JSON serializable
我需要做什么才能在json中对dict进行编码?
答案 0 :(得分:0)
开箱即用,simplejson编码器only supports some simple python objects:
Python JSON
----------------------------
dict, namedtuple -> object
list, tuple -> array
str, unicode -> string
int, long, float -> number
True -> true
False -> false
None -> null
可以将函数传递给json.dumps()
作为default
参数in order to handle other objects:
>>> import simplejson as json
>>> def encode_complex(obj):
... if isinstance(obj, complex):
... return [obj.real, obj.imag]
... raise TypeError(repr(o) + " is not JSON serializable")
...
>>> json.dumps(2 + 1j, default=encode_complex)
'[2.0, 1.0]'
>>> json.JSONEncoder(default=encode_complex).encode(2 + 1j)
'[2.0, 1.0]'
>>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
'[2.0, 1.0]'
但在你的情况下,Django already provides tools to help you serialize its objects,所以使用这些可能是推荐的方法。
from django.core import serializers
...
as_json = serializers.serialize("json", titles_to_update)
return HTTPResponse(as_json, content_type="application/json")
答案 1 :(得分:0)
这是我编写的一个简单函数,用于将datetime对象转换为可与simplejson
一起使用的函数:
def make_query_dict_jsonable(query_dict):
list_of_objects = []
for item in query_dict:
data = {}
for field_name in title.keys():
data[field_name] = str(item[field_name])
list_of_objects.append(data)
return list_of_objects