摆脱JSON中的Mongo $符号 [英] Get rid of Mongo $ signs in JSON

查看:152
本文介绍了摆脱JSON中的Mongo $符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用MongoDB为SPA(Angular)构建python后端.

I am building python backend for SPA (Angular) using MongoDB.

这是我使用的:Python 3.4MongoDB 3Flaskflask-mongoengineflask-restful

Here is what I use: Python 3.4, MongoDB 3, Flask, flask-mongoengine and flask-restful

现在,我从后端收到以下JSON:

Now I receive the following JSON from my backend:

[
    {
        "_id": {
            "$oid": "55c737029380f82fbf52eec3"
        },
        "created_at": {
            "$date": 1439129906376
        },
        "desc": "Description.....",
        "title": "This is title"
    },
    etc...
]

我想收到类似的东西:

[
    {
        "_id": "55c737029380f82fbf52eec3",
        "created_at": 1439129906376,
        "desc": "Description.....",
        "title": "This is title"
    },
    etc...
]

我现在的代码:

from flask import json
from vinnie import app
from flask_restful import Resource, Api
from vinnie.models.movie import Movie

api = Api(app)

class Movies(Resource):
    def get(self):
        movies = json.loads(Movie.objects().all().to_json())
        return movies

api.add_resource(Movies, '/movies')

型号:

import datetime
from vinnie import db

class Movie(db.Document):
    created_at = db.DateTimeField(default=datetime.datetime.now, required=True)
    title = db.StringField(max_length=255, required=True)
    desc = db.StringField(required=True)

    def __unicode__(self):
        return self.title

为前端格式化方便的JSON的最佳方法是什么?

What is the best way to format convenient JSON for front-end?

推荐答案

如果您确定要摆脱所有类似的情况,那么您当然可以编写与该模式匹配的代码.例如:

If you are confident you want to get rid of all the similar cases, then you can certainly write code that matches that pattern. For example:

info = [
    {
        "_id": {
            "$oid": "55c737029380f82fbf52eec3"
        },
        "created_at": {
            "$date": 1439129906376
        },
        "desc": "Description.....",
        "title": "This is title"
    },
    #etc...
]

def fix_array(info):
    ''' Change out dict items in the following case:
           - dict value is another dict
           - the sub-dictionary only has one entry
           - the key in the subdictionary starts with '$'
        In this specific case, one level of indirection
        is removed, and the dict value is replaced with
        the sub-dict value.
    '''
    for item in info:
        for key, value in item.items():
            if not isinstance(value, dict) or len(value) != 1:
                continue
            (subkey, subvalue), = value.items()
            if not subkey.startswith('$'):
                continue
            item[key] = subvalue

fix_array(info)
print(info)

这将返回以下内容:

[{'title': 'This is title', 'created_at': 1439129906376, 'desc': 'Description.....', '_id': '55c737029380f82fbf52eec3'}]

很明显,用JSON重新格式化很简单.

Obviously, reformatting that with JSON is trivial.

这篇关于摆脱JSON中的Mongo $符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆