我有以下结构作为列表(最初作为django ORM的结果集返回):
{'valuex': 65.92, 'day': datetime.date(2014, 10, 15), 'valuey': 74}{'valuex': 58.55, 'day': datetime.date(2014, 10, 16), 'valuey': 61}
我想将其转换(并输出)为以下json:
{
'2014-10-15' : { 'valuex': 65.92, 'day': datetime.date(2014, 10, 15), 'valuey': 74 },
'2014-10-16' : { 'valuex': 58.55, 'day': datetime.date(2014, 10, 16), 'valuey': 61 }
}
我认为这将是一件微不足道的事情:
ret = {}
for r in results:
ret[r.get('day')] = r
然后输出到json可以由Django(@render_to_json)完成 但这实际上只返回没有相应字典的日期。
我是Python的新手,我迷失在这里。
更新:
我发现实际的问题是Django没有将我的结构输出为json。上面的脚本实际上确实创建了我想要实现的结构。但是django无法将其转换为json。这样做是否安全:
return HttpResponse(str(ret))
代替?或者是否有某种方法可以将其呈现为正确的json(json.dumps具有相同的问题)。
UPDATE2: 好吧,json.dumps(ret)对我有用,只需要摆脱日期时间对象,因为它不是json seralizeable。
答案 0 :(得分:0)
import datetime
results = [{'valuex': 65.92, 'day': datetime.date(2014, 10, 15), 'valuey': 74}, {'valuex': 58.55, 'day': datetime.date(2014, 10, 16), 'valuey': 61}]
ret = {}
for r in results:
ret.update({str(r['day']): r})
print ret
{'2014-10-16': {'day': datetime.date(2014, 10, 16), 'valuey': 61, 'valuex': 58.55}, '2014-10-15': {'day': datetime.date(2014, 10, 15), 'valuey': 74, 'valuex': 65.92}}
答案 1 :(得分:0)
解决方案#1
return HttpResponse(json.dumps({'result': 'done'}), content_type='application/json')
解决方案#2
class JSONResponse(HttpResponse):
"""
An HttpResponse that renders its content into JSON.
"""
def __init__(self, data, **kwargs):
content = simplejson.dumps(data)
kwargs['content_type'] = 'application/json'
super(JSONResponse, self).__init__(content, **kwargs)
在视图中而不是HttpResponse写
data = {'success': True}
return JSONResponse(data)
关于datetime,您需要使用
将datetime对象转换为字符串my_datetime.strftime('<format>')
并在你的词典中使用它。
答案 2 :(得分:0)
import datetime
d1 = [{'valuex': 65.92, 'day': datetime.date(2014, 10, 15), 'valuey': 74},{'valuex': 58.55, 'day': datetime.date(2014, 10, 16), 'valuey': 61}]
for i in d1:
d11 = dict([[str(i['day']),i]])
print d11
{'2014-10-15': {'day': datetime.date(2014, 10, 15), 'valuey': 74, 'valuex': 65.92}}
{'2014-10-16': {'day': datetime.date(2014, 10, 16), 'valuey': 61, 'valuex': 58.55}}
OR
new_dict = {}
for i in di:
new_dict[str(i['day'])] = i
更新
试试这个
>>> from django.http import JsonResponse
>>> response = JsonResponse({'foo': 'bar'})
>>> response.content
'{"foo": "bar"}'