2013-01-09 49 views
1

我试图用Pymongo,Mongodb和Django创建一个JSON结果。我创建了一个Django视图,该视图包含一个pymongo查询并希望以json的形式返回结果。然而,结果产生arent有效json(根据jsonlint)Pymongo&Django查询无效JSON

这是我的django视图。

from django.http import HttpResponse 
import pymongo 
from datetime import datetime, timedelta 
import json 
from bson import json_util 

#setup database connection 
try: 
    conn = pymongo.Connection() 
    db = conn.mydatabase 
except: 
    print('Error: Unable to connect to database.') 
    conn = None 

def querypeople(request): 
    result = db.people.find({}).sort('name') 
    json_docs = [] 
    for doc in result: 
     json_doc = json.dumps(doc, default=json_util.default, sort_keys=True, indent=4) 
     json_docs.append(json_doc) 
    return HttpResponse(json_docs, content_type='application/json') 

它产生这个输出。 (注意在每个文档和[]之间缺少逗号应该包含整个结果。这使得JSON无效。)我在做什么错了?

“_id”:{ “$ OID”: “50c596ab2b9afbbc85ed202a” }, “DATE_ADDED”:{ “$日期”:1355126443473 }, “名”: “阿尔夫·兰登” } { “_id”:{ “$ OID”: “50c5b9d92b9afbc3f1e7c90c” }, “公司”: “可儿家族”, “DATE_ADDED”:{ “$日期”:1355135449179 }, “名”:“ Andrew Lumsden“, ”title“:”合作伙伴“

+0

这些是以某种方式序列化的两个步骤。你在每个列表元素上使用json.dumps。我是否正确地假设你所需的json应该是这样的:{“obj”:[{“_id”:{“$ oid”:“12323”},“date_added”:{“$ date”:1355126443473} name“:”Al Landon“} {”_id“:{”$ oid“:”50c5b9d92b9afbc3f1e7c90c“},”company“:”Corrs“,”date_added“:{”$ date“:1355135449179},”name“ “Andrew Lumsden”,“title”:“A Partner”}]} –

+0

这是正确的,这就是我所期望的json应该看起来如此 – CraigH

回答

0

据我所知,你返回的是响应列表,而不是json字符串。请尝试:

json_docs = json.dumps(list(result), default=json_util.default, sort_keys=True, indent=4) 
+0

这对我来说是完美的。谢谢 – CraigH