2013-01-09 6 views
1

Im пытается создать результат JSON с Pymongo, Mongodb и Django. Я создал представление Django, содержащее запрос pymongo и хочу вернуть результаты в json. Тем не менее, результаты, полученные arent valid 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": { "$ подъязычная": "50c596ab2b9afbbc85ed202a" }, "DATE_ADDED": { "дата $": 1355126443473 }, "имя": "Аль Лэндон" } { "_id": { "$ подъязычная": "50c5b9d92b9afbc3f1e7c90c" }, "компания": "Corrs", "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 string. Попытка:

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

, это сработало идеально для меня. благодаря – CraigH

Смежные вопросы