Я использую метод to_json MongoEngine для объекта, который я хочу отобразить на странице Pyarmid с визуализацией json. Я сделал много JSON-рендеринга в Pyramid, но не в MongoEngine. Метод MongoEngine to_json просто вызывает json_util.dumps. Все это прекрасно работает в Python. Проблема в том, что когда Pyramid рендерит страницу, она рендерится так:
{
"0": "\"",
"1": "{",
"2": "\\",
"3": "\"",
"4": "_", etc...
Однако дамп json выглядит нормально в Python, прежде чем он будет отображен:
'{"_id": {"$oid": "4ebca43ccc7a67085b000000"}, "created": {"$date": 1346419407715}, "modified": {"$date": 1403757381829}, "modified_by": {"$oid": "4ebca43ccc7a67085b000000"}, "email": etc...
Как было предложено в комментариях, кажется, что json обрабатывается более одного раза, но я не могу понять, где.
Я беру объект User из базы данных и прикрепляю его к каждому запросу:
def get_user(request):
return User.objects(id=ObjectId(authenticated_userid(request))).first()
config.add_request_method(get_user, 'user', reify=True)
Я возвращаю пользователя по запросу:
@view_config(route_name='api.user', permission='authenticated', renderer='json')
def user_vc(request):
response = request.response
_id = request.matchdict['id']
if _id == 'session':
user = request.user
if not user:
response.status = 403
return response
else:
print user # user object as expected (not json)
return user
У меня есть собственный адаптер для обработки объекта User:
# custom json adapters
custom_json = JSON()
def user_adapter(obj, request):
print obj.to_json() # the json looks ok here
return obj.to_json()
custom_json.add_adapter(User, user_adapter)
config.add_renderer('json', custom_json)
Я сам не делаю никакой другой jsonification, кроме адаптера выше. Так что такое?? Любая помощь будет здорово.
json, поэтому пропустите определение своего пользовательского средства визуализации и просто верните словарь. Pyramid позаботится о преобразовании словаря в JSON. - person Pedro Romano   schedule 26.06.2014